12-18类似这样的字符取得-前面字符

解决方案 »

  1.   

    select substring(col,1,charindex('-',col)-1) from tb
      

  2.   

    declare @s varchar(10)
    set @s='12-18'
    select substring(@s,1,charindex('-',@s)-1) 
    /*----------
    12(1 行受影响)?
      

  3.   

    declare @s varchar(100)
    set @s='12-18'
    select left(@s,patindex('%[^0-9]%',@s)-1)12
      

  4.   

    select left(col,charindex('-',col)-1) from tb
      

  5.   

    declare @s varchar(10)
    set @s='12-18'
    select stuff(@s,charindex('-',@s)-1),1000,'')
      

  6.   

    declare @s varchar(100)
    set @s='12-18'
    select left(@s,CHARINDEX('-',@s)-1)
      

  7.   

    这个就可以不用函数了,直接取
    select left('12-18',charindex('-','12-18')-1)
      

  8.   

    -->Title:Generating test data
    -->Author:happy_stone【不能飛的石頭】
    -->Date :2009-10-19 12:27:08
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetStr]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_GetStr]
    GO
    --分段截取函数
    CREATE FUNCTION dbo.f_GetStr(
    @s varchar(8000),      --包含多个数据项的字符串
    @pos int,             --要获取的数据项的位置
    @split varchar(10)     --数据分隔符
    )RETURNS varchar(100)
    AS
    BEGIN
    IF @s IS NULL RETURN(NULL)
    DECLARE @splitlen int
    SELECT @splitlen=LEN(@split+'a')-2
    WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
    SELECT @pos=@pos-1,
    @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
    RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
    END
    GO
    select dbo.[f_GetStr]('12-18',1,'-')
    select dbo.[f_GetStr]('12-18-19',2,'-')
    /*
    ----------------------------------------------------------------------------------------------------
    12(1 個資料列受到影響)
    ----------------------------------------------------------------------------------------------------
    18(1 個資料列受到影響)*/