sql-server - 有没有办法在 SQL Server 中拆分列以提取“-”之后的文本?
问题描述
我知道人们以前以其他方式问过这个问题,但我对通过变量推送单个字符串不感兴趣。
我有一列包含以下数据:QWERTYUIOP-1、QWERTYUIOP-XL、ASDFG-2、HGJFK-SM。该列称为产品。我需要能够在“-”之后提取文本,以便将其作为大小存储在另一列中。对于这个例子,让我们调用表产品。
如何在 SQL Server 中做到这一点?在 postgreSQL 中使用 split_part 非常简单,但除了 string_split 之外似乎没有类似的函数,并且仅适用于表。当我尝试对列使用它时,它说 string_split 不存在。
有人可以帮我解决这个问题吗?
解决方案
一种方法是用于STUFF
删除前导字符,并用于CHARINDEX
查找这些前导字符的结束位置:
SELECT V.YourString,
STUFF(V.YourString,1,CHARINDEX('-',V.YourString),'') AS TrailingCharacters
FROM (VALUES('QWERTYUIOP-1'),('QWERTYUIOP-XL'),('ASDFG-2'),('HGJFK-SM'))V(YourString)
好的,现在球门柱已经移动了。您可以修改上述内容以获取最后一个-
字符的位置REVERSE
:
SELECT V.YourString,
STUFF(V.YourString,1,LEN(V.YourString) - CHARINDEX('-',REVERSE(V.YourString))+1,'') AS TrailingCharacters
FROM (VALUES('QWERTYUIOP-1'),('QWERTYUIOP-XL'),('ASDFG-2'),('HGJFK-SM'),('QWER-WETT-EWT-1'))V(YourString)
或者,您可以使用类似的字符串拆分器DelimitedSplit8k_LEAD
并获取“最后”行:
WITH CTE AS(
SELECT V.YourString,
DS.ItemNumber,
DS.Item,
ROW_NUMBER() OVER (PARTITION BY V.YourString ORDER BY DS.ItemNumber DESC) AS RN
FROM (VALUES('QWERTYUIOP-1'),('QWERTYUIOP-XL'),('ASDFG-2'),('HGJFK-SM'),('QWER-WETT-EWT-1'))V(YourString)
CROSS APPLY dbo.DelimitedSplit8K(V.YourString,'-') DS)
SELECT YourString,
DS.Item
FROM CTE
WHERE RN = 1;
推荐阅读
- python - discord.py 块广告不起作用
- python - 提取特定的 JSON 键并在 Python 中转换为 CSV
- google-cloud-platform - 使用 Python 对来自 Google Cloud Logging 的日志进行分页
- swift - 在 SwiftUI 中使用 ForEach 枚举
- python - 通过围绕枢轴旋转一个 3d 点来创建一个圆
- mysql - 来自 SSH 的 MySQL 查询
- javascript - 仅在页面 100% 加载时执行功能的问题
- java - 关于 Codility 的 MinMaxDivision 解决方案的问题,它使用二进制搜索来解决它
- react-native - Expo不适用于firebase模拟器
- python - 在 2-D 点与其对应的 3-D 值之间绘制一条线