当手工输入时,难免回有输入不达标准的情况,就会影响到整个程序的运行. 
请问当字段中同时有汉字和数字时,怎样控制数字后面不能输入汉字,但前面可以? 
比如:某字段值是'汉字100.001汉字',怎样控制100.001的后面不出现汉字? 
谢谢!

解决方案 »

  1.   

    --1.用程序控制比较好
    --2.或创建约束
    create  table test(a varchar(20) check(patindex('%[0-9]%',a)=0 or patindex('%[0-9][啊-咗]%',a)=0))
      

  2.   

    create function T_check(@s nvarchar(100))
    returns bit
    as
    begin
    declare @a int,@b int,@bit bit
    select @a=patindex('%[0-9]%',@s),@b=0
    while patindex('%[吖-座]%',@s)>0
    select @b=patindex('%[吖-座]%',@s),@s=stuff(@s,1,patindex('%[吖-座]%',@s),'')

    return(case when @a>@b then 1 else 0 end)
    end
    godeclare @s nvarchar(100)set @s='asdfa中国'select dbo.T_check(@s)
    godeclare @s nvarchar(100)set @s='111asdfa'select dbo.T_check(@s)
      

  3.   

    create function T_check(@s nvarchar(100))
    returns bit
    as
    begin
    declare @a int,@b int,@bit bit
    select @a=patindex('%[0-9]%',@s),@b=0
    while patindex('%[吖-座]%',@s)>0
    select @b=@b+patindex('%[吖-座]%',@s),@s=stuff(@s,1,patindex('%[吖-座]%',@s),'')--改一下函数

    return(case when @a>@b then 1 else 0 end)
    end
    godeclare @s nvarchar(100)set @s='asdfa中国111中国'select dbo.T_check(@s)
    go
      

  4.   

    请问这个正则表达式对吗? 
    [\u4E00-\u9FA5]*[0-9]+[[\.]*[0-9]+]* 
    我只匹配类似这样的字符串:'汉字100.001'