2011-10-07 66 views
2

我想检查一个模式在sql中,如果有任何在该表达式(或表格单元格)以外的数字它应该返回1.如果整个单元格只有数字值它应该返回0SQL表达式匹配

EQ:

case when '200290' like [anything other than numbers] 
then 1 
else o 
+0

你在使用什么DB? SqlServer的?你可以使用[ISNUMERIC()](http://msdn.microsoft.com/en-us/library/ms186272.aspx)? – Widor

+0

我正在尝试不使用任何SQL函数。数据库是teradata,但SQL服务器中的查询也很好 – user708477

+0

对不起,-1给我看不到标签。 – Widor

回答

2

在SQL Server中,你可以使用像(我不写你整体功能):

DECLARE @t varchar(100) = '231321321321' 

SELECT CASE WHEN PATINDEX('%[^0-9]%', @t) > 0 THEN 1 
      ELSE 0 END 
+0

我希望我可以像你一样工作! – user708477

+0

@ user708477这是一个常见问题和常见解决方案。 'ISNUMERIC()'不能按预期工作,所以我们必须提出解决方法! – JNK

+0

从Teradata 13.10开始,您需要将PATINDEX()功能复制为UDF。 –

0
SELECT CASE CHARACTERS(OTRANSLATE(<your_string>,'a1234567890','a')) 
WHEN 0 THEN 0 ELSE 1 END; 

例:

 -- BTEQ Enter your SQL request or BTEQ command: 
SELECT CASE CHARACTERS(OTRANSLATE('12345','a1234567890','a')) 
WHEN 0 THEN 0 ELSE 1 END; 

*查询完成。找到一行。一列返回。 *总经过时间为1秒。

<CASE expression> 
------------------ 
       0 

SELECT CASE CHARACTERS(OTRANSLATE('1a23b45c','a1234567890','a')) WHEN 0 THEN 0 ELSE 1 END; 

*查询完成。找到一行。一列返回。 *总经过时间为1秒。

<CASE expression> 
------------------ 
       1