我的列中包含C5,C6,C3,CC,CA,CD等字段。
我希望能够找到所有带字母的列,然后找到一个数字,例如C5和C6。
我知道我是否这样做:
SELECT * FROM TABLE WHERE FIELD LIKE 'C%'
它也将返回CC,CA,CD,但我不希望这样,我想只返回那些数字。我还想更新此列删除数字,因此C5变为C而C6变为C,依此类推。
答案 0 :(得分:3)
查询将是SELECT * FROM TABLE WHERE FIELD LIKE 'C[0-9]%'
答案 1 :(得分:1)
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]%'