我的本意是象"11 -12-2006 9:00PM"这样的字符把它变成"11- 12-2006 9:00PM"
其中我只想把第一个"-"与前面的字符紧密结合.后序部份无关紧要,因为有段程序就是来处理这个事的.
但我做如下处理,结果得到的还是"11 -12-2006 9:00PM",但是象select @kk='1-'就可以紧密的在一起。
这个问題的引发的这样的。在中文版下面象字符串"nov-11-2006 5:00PM"用
cast("nov-11-2006 5:00PM" as datetime)是会发生string到datetime的转换错誤
但是在英文版下是不会出现这个问韪的,因为这个字符来源不是在一个DATETIME类型的字段里。是一个字符型字段里。里面包括其它类型的數据,当使用WHERE限定一个叫TYPE的字段时,就会得到我所想要的日期數据。然后在视图中用cast(...)的形式来转化.所以为了提高程序的赚容性,特写了一个函數,用来转换这种型式,把它变成11-12-2006 9:00PM的标准形式.对于象11 11 2006 9:00PM的形式我已象做好了,
问鶗是当是这种情况又有空格又有“-”时的情况。,下面的SQL语句大家可以测试下
declare @str nvarchar(30),@pos1 int,@pos2 int,@lens int,@pos3 int,@str1 nvarchar(30),@str2 nvarchar(30)
declare @str3 nvarchar(30),@str4 nvarchar(30),@str5 nvarchar(30),@temp1 nvarchar(30),@temp2 nvarchar(30),@redate datetime
declare @temp5 nvarchar(10),@temp6 nvarchar(30),@temp7 nvarchar(30)
set @str=ltrim('1 - 14- 2006 5:25PM')
set @str5=@str
set @pos1= charindex(' ',@str5,0) if @pos1 >0 --判断是否存在空格,并禁止象"feb - 15-2006"的格式出现因为里面也有空格
begin
set @lens=len(@str5)
set @pos2=charindex('-',@str5,0) --再去找"-"的位置
set @temp5=ltrim(left(@str5,@pos2-1)) --找到"-"左边的字符并去掉空格
select @temp5 as temp5
set @temp6=ltrim(substring(@str5,@pos2,(@lens-@pos2+1)))
select @temp6 as temp6
select @temp7=@temp5+@temp6+ltrim(substring(@str5,@pos2+2,@lens-@pos2))
select @temp7=ltrim(substring(@str5,@pos2+2,@lens-@pos2))
select @temp7 as temp7
set @temp7=@temp5+@temp6
select @temp7 as returnss
end
其中我只想把第一个"-"与前面的字符紧密结合.后序部份无关紧要,因为有段程序就是来处理这个事的.
但我做如下处理,结果得到的还是"11 -12-2006 9:00PM",但是象select @kk='1-'就可以紧密的在一起。
这个问題的引发的这样的。在中文版下面象字符串"nov-11-2006 5:00PM"用
cast("nov-11-2006 5:00PM" as datetime)是会发生string到datetime的转换错誤
但是在英文版下是不会出现这个问韪的,因为这个字符来源不是在一个DATETIME类型的字段里。是一个字符型字段里。里面包括其它类型的數据,当使用WHERE限定一个叫TYPE的字段时,就会得到我所想要的日期數据。然后在视图中用cast(...)的形式来转化.所以为了提高程序的赚容性,特写了一个函數,用来转换这种型式,把它变成11-12-2006 9:00PM的标准形式.对于象11 11 2006 9:00PM的形式我已象做好了,
问鶗是当是这种情况又有空格又有“-”时的情况。,下面的SQL语句大家可以测试下
declare @str nvarchar(30),@pos1 int,@pos2 int,@lens int,@pos3 int,@str1 nvarchar(30),@str2 nvarchar(30)
declare @str3 nvarchar(30),@str4 nvarchar(30),@str5 nvarchar(30),@temp1 nvarchar(30),@temp2 nvarchar(30),@redate datetime
declare @temp5 nvarchar(10),@temp6 nvarchar(30),@temp7 nvarchar(30)
set @str=ltrim('1 - 14- 2006 5:25PM')
set @str5=@str
set @pos1= charindex(' ',@str5,0) if @pos1 >0 --判断是否存在空格,并禁止象"feb - 15-2006"的格式出现因为里面也有空格
begin
set @lens=len(@str5)
set @pos2=charindex('-',@str5,0) --再去找"-"的位置
set @temp5=ltrim(left(@str5,@pos2-1)) --找到"-"左边的字符并去掉空格
select @temp5 as temp5
set @temp6=ltrim(substring(@str5,@pos2,(@lens-@pos2+1)))
select @temp6 as temp6
select @temp7=@temp5+@temp6+ltrim(substring(@str5,@pos2+2,@lens-@pos2))
select @temp7=ltrim(substring(@str5,@pos2+2,@lens-@pos2))
select @temp7 as temp7
set @temp7=@temp5+@temp6
select @temp7 as returnss
end
下列测试通过
nov-11-2006 20:00:00 OK
11-11-2006 20:00:00 OK
11 11 2006 20:00:00 OK
11/11/2006 20:00:00 OK
11 -11 -2006 20:00:00 OK
其它的方式就沒有测了