sql - 修剪字符串的一部分

标签 sql sql-server tsql sql-server-2016

我有一个表,其中有一列很长。我只需要从列中获取名称。

这是列名:

QSTY-IOM-HFVNBJGYG | Mobile #: 9876541323 | CUSTOMER NAME: MNOP UNIPOUYTREA POIUY | INVOICE DATE:02/28/18 | EMP#: 101466 | EMPLOYEE NAME: ANGELINA CASIANO

我只需要从该列中获取客户名称。我尝试了 Charindex,它显示了一条错误消息

Invalid length parameter passed to the LEFT or SUBSTRING function.

输出:

MNOP UNIPOUYTREA POIUY

最佳答案

由于您使用的是 SQL Server 2016,因此您可以使用它内置的 STRING_SPLIT 将字符串转换为表格的方法。 然后,您所要做的就是从以 CUSTOMER NAME: 开头的表中选择值,像这样:

DECLARE @s varchar(300) = 'QSTY-IOM-HFVNBJGYG | Mobile #: 9876541323 | CUSTOMER NAME: MNOP UNIPOUYTREA POIUY | INVOICE DATE:02/28/18 | EMP#: 101466 | EMPLOYEE NAME: ANGELINA CASIANO'

SELECT [value]
FROM STRING_SPLIT(@s, '|')
WHERE LTRIM([value]) LIKE 'CUSTOMER NAME:%'

但是,您应该阅读 Is storing a delimited list in a database column really that bad?并尽可能规范化您的数据库。

关于sql - 修剪字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50347411/

相关文章:

SQL Server - 显示人员及其银行名称的查询是单行吗?

sql - Postgres 的文本列不喜欢我的 zlib 压缩数据

sql-server - 如何使用嵌套循环加速查询

mysql - MySQL 和 MSSQL 之间的分布式事务

sql - 如何在T-SQL中右连接日期表?

php - MySQL:如何检查是否列出了用户

mysql - 如何通过使用 sql 对特定列进行分组来获取平均时间?

sql-server - SQL Server - Sum(Log()) 当一个值为 0 时

SQL Server 存储过程 IF Exist Update Else Insert

sql-server - TSQL - 与 Like 的模式匹配