sql - 从sql server中的某些字符串中提取数字
问题描述
我有如下文字
AB-MFG 49UN STEEL
GH-NH, 345UN IRON
M787 UH, 77 UNITS GREY
G7-YUT 365 UNITS WHITE
我想提取字符串之前的数字UN
和UNITS
+------------------------+-----+
| AB-MFG 49UN STEEL | 49 |
+------------------------+-----+
| GH-NH, 345UN IRON | 345 |
+------------------------+-----+
| M787 UH, 77 UNITS GREY | 77 |
+------------------------+-----+
| G7-YUT 365 UNITS WHITE | 365 |
+------------------------+-----+
目前我正在使用属于查询。我必须写一个案例陈述来涵盖这两种情况。有没有其他有效的解决方案?
SELECT REVERSE(SUBSTRING(SUBSTRING(REVERSE(LEFT(desc, CHARINDEX('UN ', desc))), 2, 1000), 1, CHARINDEX(' ', SUBSTRING(REVERSE(LEFT(desc, CHARINDEX('UN ', desc))), 2, 1000))))
FROM MYTABLE
解决方案
您可以PATINDEX
使用CROSS APPLY
.
我看到您所需的数字始终出现在空格之后和关键字之前的模式。如果是这种情况,您可以使用以下代码。
SELECT DESC,
CASE WHEN UN.I !=0 THEN SUBSTRING(DESC,NUM.I+1,UN.I-NUM.I-1)
WHEN UNITS.I !=0 THEN SUBSTRING(DESC,NUM.I+1,UNITS.I-NUM.I-1)
ELSE ''
END AS REQUIRED_NUM
FROM MYTABLE
CROSS APPLY (VALUES(PATINDEX('%UN %', DESC)))UN(I)
CROSS APPLY (VALUES(PATINDEX('% UNITS%',DESC)))UNITS(I)
CROSS APPLY (VALUES(PATINDEX('% [0-9]%', DESC)))NUM(I)
请注意,这desc
是 sql server 中的关键字。您应该避免将其用于列名。
推荐阅读
- python - 没有名为“pywintypes”的模块,也没有识别出 pip
- r - 从数据框的一列中对图案系列进行子集
- python - 为什么在 python 中做相关矩阵时会得到两种不受支持的操作数类型?
- reactjs - 错误:错误:输入是一个空元素标记,不能有 `children` 也不能使用 `dangerouslySetInnerHTML`。我没有找到解决方案
- ruby-on-rails - 双向自参照表
- python - 更改数据框格式,使行变成列
- angular - Angular/IONIC Formgroup 不适用于模板输入
- java - 包装类是否被视为对象?还是他们只是班级?(JAVA)
- google-apps-script - Google 表格脚本中的单元格引用
- testing - 为分子准备步骤调用另一个目录中的角色