Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从现有列的中间提取字符串 我有一个VARCHAR列,它可以包含字符串中间的以下字符串示例 Cost Centre: 12345_Sql_Sql Server - Fatal编程技术网

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;