sql - 如何对非常量字符串进行子串化?
问题描述
我有以下查询:
UPDATE AmmUser.ORDINI_SCANSIONATI
SET NUMERO_ORDINE=replace((substring([Text],PATINDEX('%NR. [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',[Text]),13)),'NR. ',''),
STATO=1
from AmmUser.ORDINI_SCANSIONATIIndexes
inner join AmmUser.ORDINI_SCANSIONATIDocs
on ORDINI_SCANSIONATIIndexes.DocumentID=ORDINI_SCANSIONATIDocs.DocumentID
inner join AmmUser.ORDINI_SCANSIONATI
on ORDINI_SCANSIONATIDocs.RecordID =ORDINI_SCANSIONATI.DsRecordID
where PageNumber IS NULL AND STATO IS NULL
通过这个查询,当我找到“NR”时,我尝试将子字符串的值与我的变量 NUMERO_ORDINE 相关联。文本列中的字符串。
有时我没有“NR”。字符串,所以这个查询不起作用,我从子字符串函数中得到错误的值。
当我没有“NR”时,如何创建相同的子字符串。字符串转换成文本?我总是需要隔离九个数字。
解决方案
一种方法是使用CASE
表达式:
(case when [Text] like '%NR. [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'
then replace(substring([Text],
PATINDEX('%NR. [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%', [Text]),
13
), 'NR. ', ''
)
end),
STATO = 1
您还可以在搜索时将模式添加到字符串的末尾:
replace(substring([Text],
PATINDEX('%NR. [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',
[Text] + 'NR. 000000000'),
13
), 'NR. ', ''
),
STATO = 1
在这种情况下,这有点棘手,因为模式有点复杂。
推荐阅读
- php - 紧凑():未定义的变量:运算符 - Laravel
- selenium - Selenium Headless Firefox - 非常慢
- python-3.x - Skimage RAG 合并灰度图像
- node.js - 卡在 Node.js 中的 oracle Ref 光标
- vue.js - 条目模式“'./src/components/*.vue'”不匹配任何文件/构建 Web 组件 VUEJS
- sql-server - 比较两个不同列的时间并创建显示时间差异的第三列
- c# - 无法在 Interop.QBFC13.IQBSessionManager 从注册表中读取密钥(HRESULT 异常:0x80040150 (REGDB_E_READREGDB))
- python - 从生成器对象保存图像 - Python
- r - 使用字符串 r 标记特定模式
- python - 在python中组合具有相似值的csv行