当前位置: 代码迷 >> Sql Server >> 关于查寻特定的数据的sql
  详细解决方案

关于查寻特定的数据的sql

热度:22   发布时间:2016-04-24 10:03:15.0
关于查找特定的数据的sql
比如 我现在有一个字段里有很多帐号有:123456,123456789之类近似的
现在我要查找精确的一个帐号在这个字段里只要查到123456 不要123456789,怎么查?like应该不行全查出来了近似的
------解决方案--------------------
用CHARINDEX判断,字符串前后补齐逗号
CHARINDEX(',123456,123456789,',',123456,')>0

------解决方案--------------------

IF (OBJECT_ID('fn_split')) IS NOT NULL
DROP FUNCTION fn_split
GO

--创建字符串拆分函数
CREATE FUNCTION fn_split
    (
      @c NVARCHAR(MAX) ,
      @split NVARCHAR(20) = ','
    )
RETURNS @t TABLE ( col NVARCHAR(MAX) )
AS
    BEGIN                 
        WHILE ( CHARINDEX(@split, @c) <> 0 )
            BEGIN             
                INSERT  @t
                        ( col
                        )
                VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1)
                        )             
                SET @c = STUFF(@c, 1, CHARINDEX(@split, @c) + LEN(@split) - 1,
                               '')             
            END          
        IF ( @c <> '' )
            INSERT  @t
                    ( col )
            VALUES  ( @c )           
        RETURN      
    END   


IF (OBJECT_ID('tempdb.dbo.#tab')) IS NOT NULL
DROP TABLE #tab
GO

--创建测试表
CREATE TABLE #tab
(
id INT IDENTITY(1,1),
colname nvarchar(255)
)

--插入测试数据
INSERT INTO #tab(colname)
SELECT '123456,123456789,4567,89'
UNION ALL
SELECT '123456,123456789,1223434,56789,456,789'

--查询结果
SELECT id,col FROM #tab
OUTER APPLY fn_split(colname,',')
WHERE col IN ('123456','456')

  相关解决方案