ISNUMERIC()
trong SQL Server cho phép bạn kiểm tra xem một biểu thức có phải là số hay không.
Tuy nhiên, có thể có những lúc bạn nhận được kết quả mà bạn không ngờ tới. Điều này có thể xảy ra nếu bạn có một biểu thức chứa ký tự không phải là số nhưng vẫn được ISNUMERIC()
chấp nhận dưới dạng số.
Có một loạt các ký tự ISNUMERIC()
chấp nhận ở dạng số mà bạn có thể không nghĩ là số. Chúng bao gồm các ký tự như dấu cộng (+
), dấu trừ (-
), và các ký hiệu tiền tệ khác nhau. Ngoài ra, tùy thuộc vào vị trí của nó, chữ cái e
cũng có thể cho phép toàn bộ biểu thức được hiểu là số.
Ví dụ
Dưới đây là một số ví dụ về ý tôi:
SELECT ISNUMERIC('+') AS [+], ISNUMERIC('-') AS [-], ISNUMERIC('$') AS [$], ISNUMERIC('1e2') AS [1e2], ISNUMERIC('1e+2') AS [1e+2], ISNUMERIC('e') AS [e], ISNUMERIC('e+') AS [e+];
Kết quả:
+-----+-----+-----+-------+--------+-----+------+ | + | - | $ | 1e2 | 1e+2 | e | e+ | |-----+-----+-----+-------+--------+-----+------| | 1 | 1 | 1 | 1 | 1 | 0 | 0 | +-----+-----+-----+-------+--------+-----+------+
Lưu ý rằng e
và e+
trả về kết quả âm khi chúng tự nhận, nhưng trả về kết quả dương khi được bao quanh bởi các con số.
Điều này có thể là do, về bản chất, chúng không đại diện cho một số, nhưng khi được bao quanh bởi các số, toàn bộ biểu thức có thể được hiểu là ký hiệu khoa học (e
và e+
thường được sử dụng trong ký hiệu khoa học).
Kiểu dữ liệu số
Theo tài liệu của Microsoft, các kiểu dữ liệu ISNUMERIC()
sẽ nhận dạng là số bao gồm những điều sau đây.
Số chính xác
- bigint
- int
- smallint
- tinyint
- bit
Độ chính xác cố định
- thập phân
- số
Gần đúng
- float
- thực
Giá trị tiền tệ
- tiền
- tiền nhỏ
Ngoài ra, ISNUMERIC()
trả về 1 cho một số ký tự không phải là số (như trong ví dụ trên). Điều này bao gồm các ký tự như dấu cộng (+
), dấu trừ (-
) và các ký hiệu tiền tệ hợp lệ như ký hiệu đô la ($
).
Ngoài ra, như đã thấy trong ví dụ, chữ cái e
có thể ảnh hưởng đến kết quả khi một phần của biểu thức lớn hơn và tùy thuộc vào vị trí của nó trong biểu thức đó.