【问题标题】:Find first instance of space in string在字符串中查找第一个空格实例
【发布时间】:2019-04-24 13:12:54
【问题描述】:

我试图通过在字符串字段 Part_Comment 中查找空格“”的第一个实例来返回字符串中的第一个“单词”。 Part_Comment 字段中的字符串示例如下:

13088V21 () (FAB)
G16707 (FOLD) ()
16636U01.01

我试过了:

substring(Part_Comment from 1 for position(' ' in Part_Comment)-2) as "AssyNo",

出现错误“关键字'from'附近的语法不正确。”但是当我单独使用 Part_Comment 时效果很好。

substring(Part_Comment from 1) as "AssyNo",

和上面一样的错误

left(Part_Comment,10) as "AssyNo",

这可行,但我需要使用position 函数或其他东西来查找“”子字符串。但显然position 函数在发生多个实例时返回 0。

我想这是用户想要的很常见的事情,所以必须有一个简单的解决方案。

【问题讨论】:

  • 您确定您使用的是 FB2.5 吗?因为在 2.0 中添加了对长度(和 startpos)作为任何有效整数表达式的支持,所以低于它的版本要求长度必须是整数文字。
  • 您确定您使用的是 Firebird 吗? “关键字 .. 附近的语法不正确” 不是 Firebird 错误消息,而是 Microsoft SQL Server 错误消息。
  • @MarkRotteveel MS SQL 还是 MySQL?我相信我经常在使用 MYSQL 5.6 的 SQLFiddle 上看到这个错误
  • @Arioch'MySQL 使用 "Incorrect syntax near .."(所以没有'关键字'
  • @MarkRotteveel - 你是对的!它是 MS SQL。所以我使用了错误的功能,因为位置不存在。

标签: sql-server position substring


【解决方案1】:

您可以像这样使用 LEFT 和 POSITION 来做到这一点:

LEFT(Part_Comment, POSITION(' ' in Part_Comment)-1))

编辑

正如@Arioch '评论中建议的,需要实施安全性

  CASE POSITION(' ' in Part_Comment)
    WHEN 0 THEN 'Part_Comment'
    ELSE LEFT(Part_Comment, POSITION(' ' in Part_Comment)-1)
  END

【讨论】:

  • 我敢打赌,如果根本没有空间,您必须添加 coalesce
  • @Arioch'我做了编辑。这可以吗,或者可以用其他方式完成。
  • 好吧,COALESCE 函数比IIF 或完整的CASE 更简洁易读= 更安全。例如,您只是通过将 Part_Comment 放入引号中而犯了一个错误:-D / Part_Comment 本身可能是NULL
  • LEFT(Part_Comment, COALESCE(POSITION(' ' in Part_Comment)-1), 0))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多