You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012句子拆词及CSV导入后查询异常求助

问题解决:SQL Server查询匹配问题及字符串拆分方法

一、为什么你的查询没有返回结果?

你当前的查询语句用了=来匹配'%in%',这是错误的用法:

SELECT * FROM BookTitles WHERE Title = '%in%'

在SQL Server中,=是精确匹配运算符,它只会返回Title字段完全等于'%in%'的记录——显然你的数据里没有这样的行,所以返回空结果。

要实现“包含某个子串”的模糊查询,你需要使用LIKE运算符,正确的语句应该是:

SELECT * FROM BookTitles WHERE Title LIKE '%in%'

这样就能匹配到所有Title中包含in的记录,也就是你预期的结果:

1 : Cat in the hat
5: Inside the cave
6: Incorporate

二、SQL Server 2012中拆分句子为单词的方法

SQL Server 2012没有内置的STRING_SPLIT函数(这个函数从2016版本才开始支持),所以我们需要用自定义方法来实现,这里提供两种常用方案:

方案1:递归CTE拆分法

这种方法不需要创建额外的函数,直接通过递归公共表表达式来拆分字符串:

DECLARE @InputString NVARCHAR(MAX) = 'Cat in the hat';

WITH SplitWords AS (
    SELECT 
        CAST('' AS NVARCHAR(MAX)) AS Word,
        CAST(@InputString AS NVARCHAR(MAX)) AS RemainingString
    UNION ALL
    SELECT 
        CAST(LEFT(RemainingString, CHARINDEX(' ', RemainingString + ' ') - 1) AS NVARCHAR(MAX)),
        CAST(RIGHT(RemainingString, LEN(RemainingString) - CHARINDEX(' ', RemainingString + ' ')) AS NVARCHAR(MAX))
    FROM SplitWords
    WHERE RemainingString > ''
)
SELECT Word FROM SplitWords WHERE Word > '';

这个CTE会递归地把输入字符串按空格分割成单个单词,最终输出每个独立的单词。

方案2:创建自定义表值函数

如果你需要频繁拆分字符串,可以创建一个可复用的表值函数:

CREATE FUNCTION dbo.SplitStringToWords
(
    @InputString NVARCHAR(MAX),
    @Delimiter CHAR(1) = ' '
)
RETURNS @Result TABLE (Word NVARCHAR(MAX))
AS
BEGIN
    DECLARE @StartIndex INT, @EndIndex INT;

    SET @StartIndex = 1;
    IF SUBSTRING(@InputString, LEN(@InputString) - 1, LEN(@InputString)) <> @Delimiter
    BEGIN
        SET @InputString = @InputString + @Delimiter;
    END

    WHILE CHARINDEX(@Delimiter, @InputString) > 0
    BEGIN
        SET @EndIndex = CHARINDEX(@Delimiter, @InputString);
        
        INSERT INTO @Result (Word)
        SELECT SUBSTRING(@InputString, @StartIndex, @EndIndex - @StartIndex);
        
        SET @InputString = SUBSTRING(@InputString, @EndIndex + 1, LEN(@InputString));
    END

    RETURN;
END;

使用这个函数时,只需要调用:

SELECT Word FROM dbo.SplitStringToWords('Harry potter and the chamber of secrets', ' ');

就能得到拆分后的所有单词。


内容的提问来源于stack exchange,提问作者CastilloCaleb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:08