我在sql中有一个varchar(25)字段col1。 col1可以有a-z&只有数字。我必须找出col1是否可以转换为BIGINT。如果那是convertibale(只有数字且小于< 2 ^ 63-1)则返回true,否则为false。
我只能写出第一个条件。
SELECT CASE patindex ('%[a-zA-Z]%',col1) = 0 THEN 'false' else 'True' END FROM Table
有人可以帮我写第二个条件
答案 0 :(得分:1)
如果您使用的是SQL Server 2012,则可以使用TRY_PARSE;
SELECT CASE WHEN try_parse(col1 as bigint) is null THEN 'false' else 'True' END FROM Table
答案 1 :(得分:0)
SELECT CASE WHEN
ISNUMERIC(col1) = 1 AND col1 BETWEEN
-9223372036854775808 AND 9223372036854775807 THEN 'True' ELSE 'False' END
如果你不喜欢数字那么......
SELECT CASE WHEN
ISNUMERIC(col1) = 1 AND col1 BETWEEN
(POWER(CAST(2 AS BIGINT),CAST(62 AS BIGINT))-1)* (-2)-2 AND (POWER(CAST(2 AS BIGINT),CAST(62 AS BIGINT))-1)* 2 +1THEN 'True' ELSE 'False' END
这很难看,但是try_parse在< 2012版
中无效答案 2 :(得分:0)
尝试:
SELECT
CASE WHEN TRY_CONVERT(bigint, 'rtew53523523') IS NULL
THEN 'Casting failed for bigint'
ELSE 'Cast succeeded for bigint'
END AS Result;