SQL SERVER 查询中,我需要对列按逗号分隔并且我的兼容级别只有90,在不改动兼容级别的情况下该怎么写SQL脚本
时间: 2024-09-09 15:08:00 浏览: 43
SQL Server误区30日谈 第13天 在SQL Server 2000兼容模式下不能使用DMV
如果你的SQL Server查询需要处理包含逗号分隔值的数据,并且由于兼容级别的限制无法直接使用`STRING_SPLIT()`函数(该函数是在SQL Server 2016及更高版本引入的),你可以使用一些字符串函数配合一些临时表或者自连接来实现这个需求。
例如,假设你想从名为`YourTable`的表中提取某个列`CommaSeparatedValues`,可以尝试使用以下步骤:
1. 将逗号分隔的值存储到临时表或变量中:
```sql
DECLARE @tempTable TABLE (ID INT IDENTITY PRIMARY KEY, value NVARCHAR(MAX));
INSERT INTO @tempTable (value)
SELECT SplitValue
FROM (
SELECT LTRIM(RTRIM(value)) AS SplitValue
FROM YourTable
) t
CROSS APPLY STRING_SPLIT(t.value, ',')
```
这里我们首先将原始数据通过`STRING_SPLIT()`转换为行集,然后使用`LTRIM/RTRIM`去除两边的空格。
2. 对每个单独的值进行进一步操作:
```sql
SELECT
YourColumn,
SubString(value, 1, CharIndex(',', value) - 1) AS ProcessedValue
FROM
YourTable Cross Apply (
SELECT TOP 1 value
FROM @tempTable
WHERE @tempTable.ID = YourTable.YourColumn
) AS Tmp
```
这部分会遍历临时表,取出每个逗号前的部分作为新的列`ProcessedValue`。
请注意,这种方法效率较低,因为它每次只处理一行数据,如果有大量数据的话,性能可能会受影响。如果你能升级到支持`STRING_SPLIT()`的版本,那是更推荐的做法。
阅读全文