澳门新葡亰亚洲在线Sql Server 特殊日期加减函数

在sql中我判断包含字符串我们可使用很多方法,如like,replace,charindex函数都可实现我们要的功能,下面我来给各位介绍判断字符串包含字符串sql语句。

澳门新葡亰亚洲在线 1if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_DateADD]’) and xtype in (N’FN’, N’IF’, N’TF’))
澳门新葡亰亚洲在线 2    drop function [dbo].[f_DateADD]
澳门新葡亰亚洲在线 3GO
澳门新葡亰亚洲在线 4
澳门新葡亰亚洲在线 5澳门新葡亰亚洲在线 6/**//*–特殊日期加减函数
澳门新葡亰亚洲在线 7
澳门新葡亰亚洲在线 8    对于日期指定部分的加减,使用DATEADD函数就可以轻松实现。
澳门新葡亰亚洲在线 9    在实际的处理中,还有一种比较另类的日期加减处理
澳门新葡亰亚洲在线 10    就是在指定的日期中,加上(或者减去)多个日期部分
澳门新葡亰亚洲在线 11    比如将2005年3月11日,加上1年3个月11天2小时。
澳门新葡亰亚洲在线 12    对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。
澳门新葡亰亚洲在线 13
澳门新葡亰亚洲在线 14    本函数实现这样格式的日期字符串加减处理:
澳门新葡亰亚洲在线 15    y-m-d h:m:s.m | -y-m-d h:m:s.m
澳门新葡亰亚洲在线 16    说明:
澳门新葡亰亚洲在线 17    要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔
澳门新葡亰亚洲在线 18    最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。
澳门新葡亰亚洲在线 19    如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。
澳门新葡亰亚洲在线 20–*澳门新葡亰亚洲在线,/
澳门新葡亰亚洲在线 21
澳门新葡亰亚洲在线 22澳门新葡亰亚洲在线 23/**//*–调用示例
澳门新葡亰亚洲在线 24
澳门新葡亰亚洲在线 25    SELECT dbo.f_DateADD(GETDATE(),’11:10′)
澳门新葡亰亚洲在线 26–*/
澳门新葡亰亚洲在线 27
澳门新葡亰亚洲在线 28CREATE FUNCTION dbo.f_DateADD(
澳门新葡亰亚洲在线 29@Date     datetime,
澳门新葡亰亚洲在线 30@DateStr   varchar(23)
澳门新葡亰亚洲在线 31)RETURNS datetime
澳门新葡亰亚洲在线 32AS
澳门新葡亰亚洲在线 33BEGIN
澳门新葡亰亚洲在线 34    DECLARE @bz int,@s varchar(12),@i int
澳门新葡亰亚洲在线 35
澳门新葡亰亚洲在线 36    IF @DateStr IS NULL OR @Date IS NULL 
澳门新葡亰亚洲在线 37        OR(CHARINDEX(‘.’,@DateStr)>0
澳门新葡亰亚洲在线 38            AND @DateStr NOT LIKE ‘%[:]%[:]%.%’)
澳门新葡亰亚洲在线 39        RETURN(NULL)
澳门新葡亰亚洲在线 40    IF @DateStr=” RETURN(@Date)
澳门新葡亰亚洲在线 41
澳门新葡亰亚洲在线 42    SELECT @bz=CASE 
澳门新葡亰亚洲在线 43            WHEN LEFT(@DateStr,1)=’-‘ THEN -1
澳门新葡亰亚洲在线 44            ELSE 1 END,
澳门新葡亰亚洲在线 45        @DateStr=CASE 
澳门新葡亰亚洲在线 46            WHEN LEFT(@Date,1)=’-‘ 
澳门新葡亰亚洲在线 47            THEN STUFF(RTRIM(LTRIM(@DateStr)),1,1,”)
澳门新葡亰亚洲在线 48            ELSE RTRIM(LTRIM(@DateStr)) END
澳门新葡亰亚洲在线 49
澳门新葡亰亚洲在线 50    IF CHARINDEX(‘ ‘,@DateStr)>1
澳门新葡亰亚洲在线 51        OR CHARINDEX(‘-‘,@DateStr)>1
澳门新葡亰亚洲在线 52        OR(CHARINDEX(‘.’,@DateStr)=0
澳门新葡亰亚洲在线 53            AND CHARINDEX(‘:’,@DateStr)=0)
澳门新葡亰亚洲在线 54    BEGIN
澳门新葡亰亚洲在线 55        SELECT @i=CHARINDEX(‘ ‘,@DateStr+’ ‘)
澳门新葡亰亚洲在线 56            ,@s=REVERSE(LEFT(@DateStr,@i-1))+’-‘
澳门新葡亰亚洲在线 57            ,@DateStr=STUFF(@DateStr,1,@i,”)
澳门新葡亰亚洲在线 58            ,@i=0
澳门新葡亰亚洲在线 59        WHILE @s>” and @i<3
澳门新葡亰亚洲在线 60            SELECT @Date=CASE @i
澳门新葡亰亚洲在线 61                    WHEN 0 THEN DATEADD(Day,@bz*REVERSE(LEFT(@s,CHARINDEX(‘-‘,@s)-1)),@Date)
澳门新葡亰亚洲在线 62                    WHEN 1 THEN DATEADD(Month,@bz*REVERSE(LEFT(@s,CHARINDEX(‘-‘,@s)-1)),@Date)
澳门新葡亰亚洲在线 63                    WHEN 2 THEN DATEADD(Year,@bz*REVERSE(LEFT(@s,CHARINDEX(‘-‘,@s)-1)),@Date)
澳门新葡亰亚洲在线 64                END,
澳门新葡亰亚洲在线 65                @s=STUFF(@s,1,CHARINDEX(‘-‘,@s),”),
澳门新葡亰亚洲在线 66                @i=@i+1                
澳门新葡亰亚洲在线 67    END
澳门新葡亰亚洲在线 68    IF @DateStr>”
澳门新葡亰亚洲在线 69    BEGIN
澳门新葡亰亚洲在线 70        IF CHARINDEX(‘.’,@DateStr)>0
澳门新葡亰亚洲在线 71            SELECT @Date=DATEADD(Millisecond
澳门新葡亰亚洲在线 72                    ,@bz*STUFF(@DateStr,1,CHARINDEX(‘.’,@DateStr),”),
澳门新葡亰亚洲在线 73                    @Date),
澳门新葡亰亚洲在线 74                @DateStr=LEFT(@DateStr,CHARINDEX(‘.’,@DateStr)-1)+’:’,
澳门新葡亰亚洲在线 75                @i=0
澳门新葡亰亚洲在线 76        ELSE
澳门新葡亰亚洲在线 77            SELECT @DateStr=@DateStr+’:’,@i=0
澳门新葡亰亚洲在线 78        WHILE @DateStr>” and @i<3
澳门新葡亰亚洲在线 79            SELECT @Date=CASE @i
澳门新葡亰亚洲在线 80                    WHEN 0 THEN DATEADD(Hour,@bz*LEFT(@DateStr,CHARINDEX(‘:’,@DateStr)-1),@Date)
澳门新葡亰亚洲在线 81                    WHEN 1 THEN DATEADD(Minute,@bz*LEFT(@DateStr,CHARINDEX(‘:’,@DateStr)-1),@Date)
澳门新葡亰亚洲在线 82                    WHEN 2 THEN DATEADD(Second,@bz*LEFT(@DateStr,CHARINDEX(‘:’,@DateStr)-1),@Date)
澳门新葡亰亚洲在线 83                END,
澳门新葡亰亚洲在线 84                @DateStr=STUFF(@DateStr,1,CHARINDEX(‘:’,@DateStr),”),
澳门新葡亰亚洲在线 85                @i=@i+1
澳门新葡亰亚洲在线 86    END
澳门新葡亰亚洲在线 87
澳门新葡亰亚洲在线 88    RETURN(@Date)
澳门新葡亰亚洲在线 89END
澳门新葡亰亚洲在线 90GO
澳门新葡亰亚洲在线 91

通过2个函数CHARINDEX和PATINDEX以及通配符的灵活使用

函数:CHARINDEX和PATINDEX

CHARINDEX:查某字符(串)是否包含在其他字符串中,返回字符串中指定表达式的起始位置。

PATINDEX:查某字符(串)是否包含在其他字符串中,返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。特殊:可以使用通配符!

例子:

  1. 查询字符串中是否包含非数字字符

    SELECT PATINDEX(‘%[^0-9]%’, ‘1235X461’)SELECT PATINDEX(‘%[^0-9]%’, ‘12350461’)

  2. 查询字符串中是否包含数字字符

    SELECT PATINDEX(‘%[0-9]%’, ‘SUYLLGoO’)SELECT PATINDEX(‘%[0-9]%’, ‘SUYLLG0O’)

3.函数判断字符串只包含数字

CREATE FUNCTION [dbo].fn_IsNumeric(@pString VARCHAR(8000))RETURNS bitWITH ENCRYPTIONASBEGINDECLARE @vJudge intSET @vJudge = 0SELECT @vJudge = CASE WHEN PATINDEX('%[0-9]%', LOWER(@pString))  0 THEN 0WHEN PATINDEX('%[0-9]%', LOWER(@pString)) = 0 THEN 1ENDRETURN @vJudgeEND

4.函数判断字符串只包含字母

CREATE FUNCTION [dbo].fn_IsAlpha(@pString VARCHAR(8000))RETURNS bitWITH ENCRYPTIONASBEGINDECLARE @vJudge intSET @vJudge = 0SELECT @vJudge = CASE WHEN PATINDEX('%[a-z]%', LOWER(@pString))  0 THEN 0WHEN PATINDEX('%[a-z]%', LOWER(@pString)) = 0 THEN 1ENDRETURN @vJudgeEND
  1. 函数判断字符串不包含任何符号

    CREATE FUNCTION [dbo].fn_IsAlphanumeric(@pString VARCHAR(8000))RETURNS bitWITH ENCRYPTIONASBEGINDECLARE @vJudge intSET @vJudge = 0SELECT @vJudge = CASE WHEN PATINDEX(‘%[^a-z0-9]%’, LOWER(@pString)) 0 THEN 0WHEN PATINDEX(‘%[^a-z0-9]%’, LOWER(@pString)) = 0 THEN 1ENDRETURN @vJudgeEND

  2. 函数判断字符串不包含任何符号

    CREATE FUNCTION [dbo].fn_IsAlphanumericBlank(@pString VARCHAR(8000))RETURNS bitWITH ENCRYPTIONASBEGINDECLARE @vJudge intSET @vJudge = 0SELECT @vJudge = CASE WHEN PATINDEX(‘%[^a-z0-9 ]%’, LOWER(@pString)) 0 THEN 0WHEN PATINDEX(‘%[^a-z0-9 ]%’, LOWER(@pString)) = 0 THEN 1ENDRETURN @vJudgeEND– 注意:[^a-z0-9 ]模式中最后有一个空格。

用charindex——charindex0 –包含 查看一段话、一篇文章里面包含什么词

select ID,title,author from Article where CHARINDEX(title,@item)0

7.用like——

select * from tablename where field1 like like ‘%key%'

8.使用replace()函数

declare @item nvarchar(100)set @item='英语好难'; select ID,title,author from Article where LEN(REPLACE(@item,title,''))len(@item);--根据替换后的长度进行判断2、

总结

以上所述是小编给大家介绍的SQL中字符串中包含字符的判断方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

发表评论

电子邮件地址不会被公开。 必填项已用*标注