如何在数据库字段中查找某个模式?

时间:2008-12-19 15:39:13

标签: sql-server tsql

我的列中包含C5,C6,C3,CC,CA,CD等字段。

我希望能够找到所有带字母的列,然后找到一个数字,例如C5和C6。

我知道我是否这样做:

SELECT * FROM TABLE WHERE FIELD LIKE 'C%'

它也将返回CC,CA,CD,但我不希望这样,我想只返回那些数字。我还想更新此列删除数字,因此C5变为C而C6变为C,依此类推。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

Try starting here

Microsoft对Like的引用包含有关可在该类型语句中使用的表达式的信息。

答案 2 :(得分:1)

您真正需要做的是重新设计您的结构,因为您不应该以这种方式存储数据。子表是存储此类数据的方式,然后您可以轻松查询和更新。具有公认解决方案的问题是,如果文本不以C开头,那么如果在同一文本组中存在与C5,C6的倍数,则更新将最不准确。这违反了数据库设计的绝对第一规则,绝不会在每行的列中存储多条信息。

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

答案 3 :(得分:0)

使用其中任何一种

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]%'