Sql 如何从现有列的中间提取字符串 我有一个VARCHAR列,它可以包含字符串中间的以下字符串示例 Cost Centre: 12345
或Sql 如何从现有列的中间提取字符串 我有一个VARCHAR列,它可以包含字符串中间的以下字符串示例 Cost Centre: 12345,sql,sql-server,Sql,Sql Server,或 12345值可以是动态的,但长度始终为5位。是否有办法提取5位数字并将其作为自己的列输出 谢谢你的阅读 George您可以使用STRING\u SPLIT,然后使用LEFT获取5个字符。由于可能存在空间,我们需要在左功能之前应用修剪 DECLARE@t表(charval-VARCHAR(100)) 插入@t(字符) 价值(“成本中心:12345”), (“成本代码:12345”) 选择charval,LEFT(trim(value),5)作为5位数字 从@t作为t 交叉应用字符串_分割(t.
12345
值可以是动态的,但长度始终为5位。是否有办法提取5位数字并将其作为自己的列输出
谢谢你的阅读
George您可以使用STRING\u SPLIT,然后使用LEFT获取5个字符。由于可能存在空间,我们需要在左功能之前应用修剪
DECLARE@t表(charval-VARCHAR(100))
插入@t(字符)
价值(“成本中心:12345”),
(“成本代码:12345”)
选择charval,LEFT(trim(value),5)作为5位数字
从@t作为t
交叉应用字符串_分割(t.charval,':')
价值不象‘成本%’
可以使用
substring()
执行此操作:
这将返回字符串中的第一个5位序列,这使得格式错误的字符串具有很大的灵活性
这回答了你的问题吗?结合一个更具代表性的例子会很有用-您当前的例子暗示了字符串的结尾,而不是字符串的中间-最终解决方案似乎是修复您的设计。显然,成本中心和成本代码应该是单独的列,详细信息在那个里。是的,我同意。首先将数据库正常化。例如,成本代码和成本中心应为表中的列名。
Cost Code: 12345
+--------------------+--------------+
| charval | Just5Digits |
+--------------------+--------------+
| Cost Centre: 12345 | 12345 |
| Cost Code: 12345 | 12345 |
+--------------------+--------------+
select t.*,
substring(value, patindex('%[0-9][0-9][0-9][0-9][0-9]%', value), 5)
from t;