Có thể có những trường hợp bạn cần kiểm tra một cột để tìm các giá trị không phải số. Ví dụ:bạn phát hiện ra rằng một cột là varchar
khi nó thực sự phải là cột số.
Điều này có thể dễ dàng thực hiện trong SQL Server với ISNUMERIC()
chức năng.
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 | +-----------+
Hầu hết các giá trị trên đều là số, mặc dù chúng nằm trong varchar
cột. Các ví dụ sau kiểm tra cột này để tìm các giá trị không phải số.
ISNUMERIC()
Chức năng
SELECT c1
FROM t1
WHERE ISNUMERIC(c1) <> 1;
Kết quả:
+-----------+ | c1 | |-----------| | a | | 9afc | | e7 | | +e0 | | Ten | | 5 Dollars | +-----------+
Ở đây, tôi đã sử dụng ISNUMERIC()
cùng với chức năng Not Equal To (<>
) để kiểm tra các giá trị không phải là số.
Có thể có một lý do chính đáng để một cột là varchar
thay vì số. Nhưng nếu không, các giá trị phải được chuyển đổi thành các giá trị tương đương số của chúng và sau đó, kiểu dữ liệu của cột sẽ được thay đổi thành kiểu số. Điều này sẽ giúp duy trì tính toàn vẹn dữ liệu của cơ sở dữ liệu.
Tìm các giá trị không chứa bất kỳ số nào
Chúng tôi có thể sử dụng truy vấn sau để trả về tất cả các hàng không chứa giá trị số.
SELECT c1
FROM t1
WHERE c1 NOT LIKE '%[0-9]%';
Kết quả:
+------+ | c1 | |------| | a | | Ten | +------+
Đâ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ị không 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ị không phải là số.