正则表达式检查varchar是否可以转换为bigint

时间:2015-03-26 07:53:12

标签: sql sql-server regex

我在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

有人可以帮我写第二个条件

3 个答案:

答案 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;