【问题标题】:sql expression pattern matchingsql表达式模式匹配
【发布时间】:2011-12-03 04:27:12
【问题描述】:

我想检查 sql 中的模式,如果该表达式(或表格单元格)中有任何非数字值,则应返回 1。如果整个单元格只有数字值,则应返回 0

当量:

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

【问题讨论】:

  • 您使用的是什么数据库?数据库服务器?你能用ISNUMERIC()吗?
  • 我试图不使用任何 sql 函数。数据库是 teradata 但在 SQL server 中查询也不错
  • 对不起,-1 对我没有看到标签。
  • 查看 stackoverflow.com/questions/5064977/… 获取 mysql 答案
  • @Widor - Isnumeric 是一个臭名昭著的错误函数...

标签: sql case teradata sql-like


【解决方案1】:

在 SQL Server 中,您可以使用类似的东西(我不是为您编写整个函数):

DECLARE @t varchar(100) = '231321321321'

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

【讨论】:

  • @user708477 这是一个常见的问题,也是一个常见的解决方案。 ISNUMERIC() 没有按预期工作,所以我们必须想出解决方法!
  • 从 Teradata 13.10 开始,您需要将 PATINDEX() 功能复制为 UDF。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多