Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 将一列中的值拆分为两列_Sql Server_Tsql - Fatal编程技术网

Sql server 将一列中的值拆分为两列

Sql server 将一列中的值拆分为两列,sql-server,tsql,Sql Server,Tsql,我在SQL中有一列,我想在select上将一列拆分为两列(通过分隔符)。例如,该表当前有: --------- Mary - 16 我想要两列作为查询的结果: -------- -------- Mary 16 谢谢你的帮助 SELECT left_side = RTRIM(SUBSTRING(col, 1, CHARINDEX('->', col)-2)), right_side = LTRIM(SUBSTRING(col, CHARINDEX('->

我在SQL中有一列,我想在select上将一列拆分为两列(通过分隔符)。例如,该表当前有:

---------
Mary - 16
我想要两列作为查询的结果:

--------   --------
Mary       16
谢谢你的帮助

SELECT 
  left_side  = RTRIM(SUBSTRING(col, 1, CHARINDEX('->', col)-2)),
  right_side = LTRIM(SUBSTRING(col, CHARINDEX('->', col) + 2, 4000))
FROM dbo.table;
啊,我明白了<代码>|字符是列说明符,而不是输出的一部分。尝试:

SELECT 
  left_side  = LTRIM(RTRIM(SUBSTRING(col, 1, CHARINDEX('-', col)-1))),
  right_side = LTRIM(RTRIM(SUBSTRING(col, CHARINDEX('-', col) + 1, 4000)))
FROM dbo.table;

如果您不担心边缘情况,那么类似的方法将起作用:

Declare @Var varchar(200)
SET @Var = 'Mary - 16'

SELECT LEFT(@Var, PATINDEX('%-%', @Var) - 1), Right(@Var, LEN(@Var) - PATINDEX('%-%', @Var))

只需在查询中将@Var更改为您的字段名。

不是完全相同的字段名,但如果您指明正在使用的sql server版本以及所使用的分隔符,则查找[[sql server]split]()通常很有用。我假设
->
,但请明确。+1,但我认为
->
应该是一个箭头,显示所需的结果,分隔符应该是“-”@Lamak谢谢,我对问题进行了编辑以使其更清楚。我认为
|
->
是数据的一部分。