【问题标题】:How to look for a certain pattern within a database field?如何在数据库字段中查找特定模式?
【发布时间】:2008-12-19 15:39:12
【问题描述】:

我有一列包含 C5、C6、C3、CC、CA、CD 等字段。

我希望能够找到所有包含字母和数字(例如 C5 和 C6)的列。

我知道我是否这样做:

SELECT * FROM TABLE WHERE FIELD LIKE 'C%'

它也会返回 CC、CA、CD,但我不想这样,我只想返回数字。我也想更新这个列删除数字,所以C5变成C,C6变成C等等。

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    查询将是SELECT * FROM TABLE WHERE FIELD LIKE 'C[0-9]%'

    【讨论】:

    • 谢谢。那行得通。如何删除数字部分?
    • 根据匹配更新并将字段设置为左侧(字段,1)
    【解决方案2】:

    Try starting here

    Microsoft 的 Like 参考提供了有关您可以在该类型语句中使用的表达式的信息。

    【讨论】:

      【解决方案3】:

      您真正需要做的是重新设计您的结构,因为您不应该以这种方式存储数据。子表是存储此类数据的方式,然后您可以轻松查询和更新。已接受解决方案的问题是,如果文本不以 C 开头,您仍然会遇到问题,并且如果同一文本组中有多个 C5、C6,则更新充其量是不准确的。这违反了数据库设计的绝对第一原则,每行的列中永远不要存储超过一条信息。

      如果您真的想要一种准确的方法来查找和更新这些记录(即使您无法更改结构),您需要将它们拉出到一个相关的临时表中,该表具有 record_Id 和 value 和更新位柱子。然后找到带有数字的并更新它们和同时提交的更新标志。然后对于具有至少一个标志的记录 ID,您将重新创建字符串并更新记录本身。如果 C5 和 C6 都在数据字符串中,您还需要决定是否只需要 C 的两个值。

      【讨论】:

      • 我明白你的意思,但我没有设计数据库,所以我必须使用我所拥有的。不过感谢您提供的信息。
      • 这就是为什么我告诉你将数据移动到临时表以进行清理并返回到坏结构的方法。另一种方法不会准确地清理您的数据。
      【解决方案4】:

      使用其中任何一个

      select LEFT(col,1) from @t where col like 'c[0-9]%'
      
      select substring(col,1,1) from @t where col like 'c[0-9]%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 2022-01-17
        • 2021-04-25
        • 1970-01-01
        • 2019-12-25
        相关资源
        最近更新 更多