SqlServer 以逗号隔开的字符串字段的关联查询
时间: 2024-04-30 16:21:23 浏览: 10
如果你有一个包含逗号分隔值的字符串字段,例如:
```
id | name | hobbies
---|-------|----------
1 | Alice | reading, hiking
2 | Bob | swimming, cooking
3 | Carl | hiking, painting
```
现在你想要查找所有喜欢徒步旅行(hiking)的人,你可以使用 SQL Server 内置函数 `STRING_SPLIT` 将字符串拆分成多行,然后使用 `JOIN` 进行关联查询。
以下是一个示例查询:
```
SELECT *
FROM table1
WHERE EXISTS (
SELECT 1
FROM STRING_SPLIT(table1.hobbies, ',') AS t2
WHERE t2.value = 'hiking'
)
```
这个查询使用 `STRING_SPLIT` 函数将 `hobbies` 字段中的值拆分为多行,然后使用 `EXISTS` 子句过滤出所有包含 `hiking` 的行。你可以将 `table1` 替换为你的表名和字段名。
相关问题
sqlserver查询时逗号分隔字符串
如果你需要在 SQL Server 中查询时将一个字段中的逗号分隔字符串拆分成多行,可以使用以下方法:
假设你有一个名为 `MyTable` 的表,其中有一个名为 `MyField` 的字段,它包含逗号分隔的字符串。你可以使用以下查询来将字符串拆分成多行:
```
SELECT value
FROM STRING_SPLIT((SELECT MyField FROM MyTable), ',')
```
这将从 `MyField` 中选择逗号分隔的字符串,并使用 `STRING_SPLIT` 函数将其拆分成多行。
请注意,`STRING_SPLIT` 函数只在 SQL Server 2016 及更高版本中可用。如果你使用的是早期版本的 SQL Server,请考虑使用其他方法来拆分字符串,例如自定义函数或 XML 解析器。
sql server 将字段值以逗号隔开
可以使用 `FOR XML PATH` 子句来将 SQL Server 中的字段值以逗号隔开。以下是一个示例查询,它将 `person` 表中的所有 `name` 字段值以逗号隔开,然后将结果作为一个字符串返回:
```sql
SELECT
STUFF((
SELECT ',' + name
FROM person
FOR XML PATH('')
), 1, 1, '') AS names
```
在这个查询中,`STUFF` 函数用于删除第一个逗号,因为 `FOR XML PATH` 子句会将每个值用逗号分隔开,包括第一个值。因此需要使用 `STUFF` 函数将第一个逗号删除。最终的结果将会是一个字符串,其中所有的 `name` 字段值都用逗号隔开。
请注意,如果 `name` 字段中包含 XML 敏感字符如 `<`、`>`、`&` 等,则需要使用 `REPLACE` 函数将这些字符替换成对应的实体编码。例如:
```sql
SELECT
STUFF((
SELECT ',' + REPLACE(name, '&', '&')
FROM person
FOR XML PATH('')
), 1, 1, '') AS names
```