Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 从表中的nvarchar列提取这些特定值的T-SQL语法是什么?_Sql Server_Tsql_Nvarchar - Fatal编程技术网

Sql server 从表中的nvarchar列提取这些特定值的T-SQL语法是什么?

Sql server 从表中的nvarchar列提取这些特定值的T-SQL语法是什么?,sql-server,tsql,nvarchar,Sql Server,Tsql,Nvarchar,我使用的是SQLServer2014,我有一个表(t1),其中有一列(nvarchartype),名为Rank 本栏摘录如下: Rank #1 of 200 lodges in France #2 of 200 lodges in France ... #175 of 200 lodges in France 我想写一个SELECT语句,它将给我以下输出: Rank Rank2 Type Country #1

我使用的是
SQLServer2014
,我有一个表(t1),其中有一列(
nvarchar
type),名为Rank

本栏摘录如下:

Rank
#1 of 200 lodges in France
#2 of 200 lodges in France
...
#175 of 200 lodges in France
我想写一个SELECT语句,它将给我以下输出:

     Rank                       Rank2        Type      Country
   #1 of 200 lodges in France     1         lodges      France
   #2 of 200 lodges in France     2         lodges      France
   #175 of 200 lodges in France   175       lodges      France
   ...
我曾尝试使用此处提供的解决方案,但我一直在转换它以满足我的要求:


如何使用T-SQL实现这一点?

什么是字符串拆分器功能,SQL2016内置了一个,但对于SQL的早期版本,您可以使用Jeff Moden提供的功能

这里有一种解决问题的方法,它使用字符串拆分器和条件聚合

DECLARE @t1 TABLE ([Rank] NVARCHAR(100))

INSERT INTO @t1 ([Rank])
VALUES ('#1 of 200 lodges in France'), ('#2 of 200 lodges in France'), ('#175 of 200 lodges in France')

SELECT 
     T.[Rank]
    ,Rank2      = MAX(CASE WHEN S.ItemNumber = 1 THEN CONVERT(INT,S.[Item]) END)
    ,[Type]     = MAX(CASE WHEN S.ItemNumber = 4 THEN S.[Item] END)
    ,[Country]  = MAX(CASE WHEN S.ItemNumber = 6 THEN S.[Item] END)
FROM
    @t1 T
CROSS APPLY dbo.DelimitedSplit8K(REPLACE(T.[Rank], '#', ''), ' ') S
GROUP BY
     T.[Rank]
ORDER BY
    Rank2

但是,这种方法存在局限性,因为假设
类型
国家
只是一个单词

调用
字符索引
就可以了。但说真的,这应该用脚本语言来完成。那太糟糕了。您需要在插入过程中规范化数据,否则在T-SQL中执行此拆分可能会导致性能不佳。另外,您是否保证明天将插入无效记录(不符合您初始语法的记录)?@gotqn谢谢,但此记录是从源代码“按原样”输入的,我们对其结构没有任何控制权!如果OP没有
lodges
,而是
sea lodges
,那会怎么样?是的,但我只能根据提供的样本数据来判断