Không có boolean
trong SQL Server. Điều này có nghĩa là bạn không thể chỉ nói IF (expression)
; bạn phải so sánh nó với một cái gì đó, bởi vì nó trả về true
hoặc false
theo nghĩa tương tự như bạn có thể đã quen với các ngôn ngữ khác.
Chỉ cần một sở thích, nhưng tôi muốn viết nó theo cách này:
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
Không có cách nào trong SQL Server để tránh sự so sánh là 1, như trong ví dụ thứ hai của bạn.
Cũng như một sang một bên bạn nên lưu ý những điểm yếu của ISNUMERIC()
- nó có thể cung cấp cho dương tính giả cho các giá trị "số" như .
, CHAR(9)
, e
, $
và một loạt các chuỗi không phải số khác. Nếu bạn muốn biết nếu có điều gì là một số nguyên, ví dụ, tốt hơn nên nói:
IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
Nhưng ngay cả khi đó không phải là một thử nghiệm đầy đủ và hợp lệ vì nó sẽ trở lại đúng với giá trị > (2^32)-1
và nó sẽ trả về false cho tiêu cực giá trị.
Một nhược điểm để ISNUMERIC()
là nó sẽ trả về true nếu giá trị có thể được chuyển đổi sang bất kỳ các loại số, mà không phải là giống như tất cả loại số. Thông thường, mọi người kiểm tra ISNUMERIC()
và sau đó cố gắng truyền FLOAT
đến SMALLINT
và chuyển đổi không thành công.
Trong SQL Server 2012, bạn sẽ có phương thức mới gọi là TRY_CONVERT()
trả về NULL
nếu chuyển đổi sang loại dữ liệu được chỉ định không hợp lệ.
Nguồn
2012-02-15 00:14:40