|
查看: 2367|回复: 30
|
Ms SQL Server 2005 如何用subtring才能解决我找出日期?
[复制链接]
|
|
|
CREATE TABLE #TEMP
(
[No] [varchar](1) NULL,
[Sign Date] [varchar](50)
)
INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ce.He 10/15/2008 4:13 PM');
INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Wee.Wee 1/1/2008 9:24 AM');
INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Hi.Na 10/16/2008 10:12 AM');
INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ci.Wai 10/1/2008 4:01 AM');
SELECT 'Sign Date' = CONVERT(VARCHAR(19), LTRIM(RTRIM(SUBSTRING([Sign Date],LEN([Sign Date])-18, LEN([Sign Date])))), 120) FROM #TEMP
DROP TABLE #TEMP
如何用subtring才能解决我找出日期?
我走头无路了
谁可以救救我呢?
谢谢 |
|
|
|
|
|
|
|
|
|
|
发表于 31-10-2008 10:43 AM
|
显示全部楼层
|
应该把日期分开储存,要不然就把日期设置成固定长度, 比如 :01/01/2008 09:24 AM |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 31-10-2008 02:25 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 31-10-2008 03:05 PM
|
显示全部楼层
那么只有试试这个
SELECT 'Sign Date' = CONVERT(VARCHAR(19), LTRIM(RTRIM(SUBSTRING([Sign Date],CHARINDEX(' ',[Sign Date]), LEN([Sign Date])))), 120) FROM #TEMP
条件是在日期前面只有唯一的一个空格
比如 'Ce. He 10/15/2008 4:13 PM' 就不能用鸟 (He前面有空格) |
|
|
|
|
|
|
|
|
|
|
发表于 31-10-2008 07:37 PM
|
显示全部楼层
原帖由 musxell 于 30-10-2008 08:04 PM 发表 
如何用subtring才能解决我找出日期?
我走头无路了
谁可以救救我呢?
谢谢
我用了很白痴的方法
写一个Function
- DECLARE @input varchar(50)
- DECLARE @length int
- DECLARE @i int
- DECLARE @count int
- SET @input = 'Ce He 10/15/2008 4:13 PM'
- SET @length = len(@input)
- SET @count = 0
- SET @i=@length
- WHILE @i>0
- BEGIN
- IF SUBSTRING(@input, @i, 1) = ' '
- BEGIN
- SET @count = @count + 1
- IF @count = 3
- BEGIN
- SELECT CAST(SUBSTRING(@input, @i+1, @length-@i+1) AS DATETIME)
- END
- END
- SET @i = @i - 1
- END
复制代码 |
|
|
|
|
|
|
|
|
|
|
发表于 1-11-2008 11:00 AM
|
显示全部楼层
Convert(varchar, <column name>, 101) AS <your new column name> |
|
|
|
|
|
|
|
|
|
|
发表于 3-11-2008 01:43 AM
|
显示全部楼层
|
Ms SQL Server 的 SQL interpretor 有 regex 功能吗? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 3-11-2008 08:30 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 3-11-2008 08:32 AM
|
显示全部楼层
原帖由 tensaix2j 于 3-11-2008 01:43 AM 发表 
Ms SQL Server 的 SQL interpretor 有 regex 功能吗?
这个是什么来得? |
|
|
|
|
|
|
|
|
|
|
发表于 3-11-2008 02:12 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 4-11-2008 09:01 AM
|
显示全部楼层
原帖由 musxell 于 3-11-2008 08:30 AM 发表
好的谢谢 我只能走一步看一步
这个是store procedure?
那我select的时候怎么用这个function?
新手上路谢谢
我也是新手  
- CREATE FUNCTION functionName
- (
- @input varchar(50)
- )
- RETURNS DATETIME
- AS
- BEGIN
- DECLARE @length INT
- DECLARE @i INT
- DECLARE @count INT
- DECLARE @result DATETIME
- SET @length = LEN(@input)
- SET @count = 0
- SET @i=@length
- WHILE @i>0
- BEGIN
- IF SUBSTRING(@input, @i, 1) = ' '
- BEGIN
- SET @count = @count + 1
- IF @count = 3
- BEGIN
- SELECT @result = CAST(SUBSTRING(@input, @i+1, @length-@i+1) AS DATETIME)
- END
- END
- SET @i = @i - 1
- END
- RETURN @result
- END
复制代码 先Create 这个 Function (换掉FunctionName)
然后当你需要处理那个input(架设是 'Ce He 10/15/2008 4:13 PM')
只要Call 这个 Function 即可 (Select dbo.FunctionName('Ce He 10/15/2008 4:13 PM'))- CREATE TABLE #TEMP
- (
- [No] [varchar](1) NULL,
- [Sign Date] [varchar](50)
- )
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ce.He 10/15/2008 4:13 PM');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Wee.Wee 1/1/2008 9:24 AM');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Hi.Na 10/16/2008 10:12 AM');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ci.Wai 10/1/2008 4:01 AM');
- SELECT dbo.functionName([Sign Date]) as 'Sign Date' from #TEMP
- DROP TABLE #TEMP
复制代码
[ 本帖最后由 sfkwan 于 4-11-2008 09:03 AM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 4-11-2008 02:11 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 7-11-2008 01:02 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 7-11-2008 02:24 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 7-11-2008 02:56 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 10-11-2008 09:04 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 11-11-2008 12:46 AM
|
显示全部楼层
据我所用过的,好像都不是统一的
每个都有自己的写法
用Regular expression作Validation是最容易的
Web programmer 应该都会
我没有装MSSQL 2005,所以我没办法试,你摸索了然后告诉我  |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 13-11-2008 12:33 PM
|
显示全部楼层
原帖由 sfkwan 于 11-11-2008 12:46 AM 发表
据我所用过的,好像都不是统一的
每个都有自己的写法
用Regular expression作Validation是最容易的
Web programmer 应该都会
我没有装MSSQL 2005,所以我没办法试,你摸索了然后告诉我
好的,没问题
时隔多日,我又有SQL的问题 - INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ce.He 15/10/2008 4:13');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Wee.Wee 1/1/2008 9:24');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Hi.Na 15/12/2008 15:12');
- INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ci.Wai 10/1/2008 4:01');
复制代码 dd/mm/yyyy的日期格式,不能用去, 要如何转换?
only可以mm/dd/yyyy呀?
- DECLARE @input varchar(50)
- DECLARE @rev VARCHAR(50)
- DECLARE @result DATETIME
- DECLARE @tempDate VARCHAR(14)
- DECLARE @day VARCHAR(2)
- DECLARE @month VARCHAR(2)
- DECLARE @year VARCHAR(4)
- DECLARE @time VARCHAR(5)
- SET @input = 'Ce He 10/15/2008 4:13 PM'
- SET @rev = REVERSE(@input)
- SELECT @tempDate = CAST(REVERSE(SUBSTRING(@rev, 0, charindex(' ',@rev, CHARINDEX('/', @rev,0)))) AS VARCHAR)
- SELECT @day = SUBSTRING(@tempDate, 1, 2)
- SELECT @month = SUBSTRING(@tempDate, 4, 5)
- SELECT @year = SUBSTRING(@tempDate, 7, 11)
- SELECT @time = SUBSTRING(@tempDate, 13, 15)
- SET @result = SELECT CAST((@day+'/'+@month+'/'+@year+' '+@time) AS DATETIME)
- RETURN @result
复制代码
我写到一团糟  help me
[ 本帖最后由 musxell 于 13-11-2008 12:57 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 13-11-2008 06:34 PM
|
显示全部楼层
原帖由 musxell 于 13-11-2008 12:33 PM 发表 
好的,没问题
时隔多日,我又有SQL的问题 INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Ce.He 15/10/2008 4:13');
INSERT INTO #TEMP([No], [Sign Date]) VALUES('1', 'Wee.Wee 1/1/2008 9:24');
I ...
- DECLARE @input varchar(50)
- DECLARE @rev VARCHAR(50)
- DECLARE @result VARCHAR(50)
- DECLARE @tempDate DATETIME
- SET @input = 'Ce He 10/15/2008 4:13 PM'
- SET @rev = REVERSE(@input)
- SELECT @tempDate = CAST(REVERSE(SUBSTRING(@rev, 0, charindex(' ',@rev, CHARINDEX('/', @rev,0)))) AS VARCHAR)
- SELECT @result = convert(varchar(20), @tempDate, 103) + ' ' + convert(varchar(20), @tempDate, 8)
复制代码
利用 Cast 和 Convert
还是Oracle 的 SQL 比较容易 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 14-11-2008 09:18 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|