Trong SQL Server, chúng ta có thể sử dụng ISNUMERIC()
hàm để trả về giá trị số từ một cột.
Ngoài ra, chúng tôi có thể chạy một truy vấn riêng biệt để trả về tất cả các giá trị có chứa dữ liệu số.
Dữ liệu mẫu
Giả sử chúng ta tạo một bảng với varchar
và chèn dữ liệu như sau:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
c1 varchar(255)
);
INSERT INTO t1 (c1) VALUES
('0'),
('1'),
('+1'),
('-1'),
('+1'),
('00.00'),
('73.45'),
('+73.45'),
('-73.45'),
('.246'),
('-.34e7'),
('12.e-3'),
('1.2e+4'),
('a'),
('9afc'),
('e7'),
('+e0'),
('Ten'),
('5 Dollars');
SELECT * FROM t1;
Kết quả:
+-----------+ | c1 | |-----------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Xem như đây là một varchar
, nó chứa dữ liệu ký tự. Nó có thể chứa dữ liệu số, nhưng nó không được lưu trữ dưới dạng số. Do đó, cột có thể chứa cả dữ liệu dạng văn bản và dạng số. Các ví dụ sau kiểm tra cột này để tìm các giá trị số.
ISNUMERIC()
Chức năng
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) = 1;
Kết quả:
+--------+ | c1 | |--------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | +--------+
Ở đây, tôi đã sử dụng ISNUMERIC()
cùng với Equal To (=
) để trả về các giá trị là số. Hàm trả về 1
khi nó là số và 0
khi thì không.
Tìm giá trị chứa số
Chúng ta có thể sử dụng truy vấn sau để trả về tất cả các hàng có chứa giá trị số (ngay cả khi chúng cũng chứa các ký tự khác).
SELECT c1
FROM t1
WHERE c1 LIKE '%[0-9]%';
Kết quả:
+-----------+ | c1 | |-----------| | 0 | | 1 | | +1 | | -1 | | +1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | 9afc | | e7 | | +e0 | | 5 Dollars | +-----------+
Đây là một kết quả khác với ví dụ trước đó, bởi vì chúng tôi chỉ đơn giản là đang tìm kiếm tất cả các giá trị chứa bất kỳ dữ liệu số nào. Trong ví dụ trước, chúng tôi đang tìm kiếm những giá trị có dạng số.