在sql server 2005下,
我想储存类似这样的时间“17:14:49.188”
有没有日期无所谓。
但是一旦我用sql语句插入的时候,就变成了“1/1/1900 17:14:49”
3位digit的毫秒没有了……请问,如何修改才能保留毫秒呢?
(我原先试着用varchar保存过,但是不能像datetime一样比较两个varchar的大小)
多谢。
我想储存类似这样的时间“17:14:49.188”
有没有日期无所谓。
但是一旦我用sql语句插入的时候,就变成了“1/1/1900 17:14:49”
3位digit的毫秒没有了……请问,如何修改才能保留毫秒呢?
(我原先试着用varchar保存过,但是不能像datetime一样比较两个varchar的大小)
多谢。
解决方案 »
- 麻烦哪位高手帮推荐一本好点的MSSQL书籍
- 在SQLSERVER作业中怎样设置步骤?
- A表和B表部分数据相同,怎么检索A表中不与B表相同的那部分数据
- for xml path + HTML表格 +自动发送邮件 的疑惑
- 2个查询结果不一样,哪位分析下,哈哈
- 来抢分吧,关于Sql语句中的Join问题
- 关于在sql语句中截取字符串的问题
- 关于两张表取日期段重复的高难问题,一高手已经给我解决,现在还需要提取一列,不知如何实现?
- 请教有关sql server与isa server的问题?给高分!
- 高效的SQLserver分页存储过程
- 看看这SQL错在哪里呢?怎么在网页程序运行不了呢?
- sql server 2000发送邮件问题
-----------------------------
cdate
2010-09-14 12:50:43.840
-----------------------------
cdate
12:50:43:840
SELECT @dt = '17:14:49.188'
SELECT @dt,DATEPART(ms,@dt)
/*
1900-01-01 17:14:49.187 187
*/
--毫秒精度不够了
--存varchar比较时直接cast为datetime时毫秒也会舍入的
select getdate()
结果
2010-09-14 12:53:38.327
SQL Server 2005 联机丛书
CAST 和 CONVERT (Transact-SQL)
--楼主不明白,直接按F1,索引convert --> 114 - hh:mi:ss:mmm(24h)
--但以上都不能解决这个问题吧:
SELECT DATEDIFF(ms,CAST('17:14:49.187' AS DATETIME),CAST('17:14:49.188' AS DATETIME))
--如是我的话直接这样解决:
IF OBJECT_ID('fn_DTNum') IS NOT NULL DROP FUNCTION fn_DTNum
GO CREATE FUNCTION fn_DTNum (@dt VARCHAR(30))
RETURNS BIGINT
AS
BEGIN
IF @dt IS NULL OR LEN(@dt) = 0 RETURN 0
DECLARE @hh INT
DECLARE @mm INT
DECLARE @ss INT
DECLARE @ms INT
DECLARE @dtn BIGINT
SELECT @hh = CAST(LEFT(@dt,PATINDEX('%:%',@dt)-1) AS INT)
SET @dt = STUFF(@dt,1,PATINDEX('%:%',@dt),'')
SELECT @mm = CAST(LEFT(@dt,PATINDEX('%:%',@dt)-1) AS INT)
SET @dt = STUFF(@dt,1,PATINDEX('%:%',@dt),'')
SELECT @ss = CAST(LEFT(@dt,PATINDEX('%.%',@dt)-1) AS INT)
SET @dt = STUFF(@dt,1,PATINDEX('%.%',@dt),'')
SELECT @ms = CAST(@dt AS INT)
SELECT @dtn = @hh*60*60*1000 + @mm*60*1000 + @ss*1000 + @ms
RETURN @dtn
END
GOIF OBJECT_ID('fn_CompDT') IS NOT NULL DROP FUNCTION fn_CompDT
GO CREATE FUNCTION fn_CompDT(@dt1 VARCHAR(30),@dt2 VARCHAR(30))
RETURNS INT
AS
BEGIN
RETURN dbo.fn_DTNum(@dt2)-dbo.fn_DTNum(@dt1)
END
GOSELECT dbo.fn_CompDT('17:14:49.187','17:14:49.188')/*
前者结果:
0
后者自定义函数结果:
1
*/