Rac*_*SQL 15 sql-server-2008 sql-server varchar datetime
基于选择,我可以像这样返回 x 行:
1 2019-07-23 10:14:04.000
1 2019-07-23 10:14:11.000
2 2019-07-23 10:45:32.000
1 2019-07-23 10:45:33.000
Run Code Online (Sandbox Code Playgroud)
我们所有的毫秒都是 0。
有没有办法将 1 x 1 毫秒加起来,所以选择看起来像这样:
1 2019-07-23 10:14:04.001
1 2019-07-23 10:14:11.002
2 2019-07-23 10:45:32.003
1 2019-07-23 10:45:33.004
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个游标甚至一个没有成功的更新。
这是获得我想要的结果的查询:
select top 10 ModifiedOn
from [SCHEMA].[dbo].[TABLE]
where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Run Code Online (Sandbox Code Playgroud)
有 81k 个值。该字段是DATETIME。
Dou*_*den 13
该DateAdd功能是你在找什么。
使用millisecond作为第一个参数的功能,告诉它要添加毫秒。然后1用作第二个参数,用于添加的毫秒数。
下面是一个例子,把当前时间抓取到一个变量中,然后给它加上一毫秒,并将结果保存为第二个变量,然后打印每个变量
Declare @RightNow as DateTime2
Declare @RightNowPlusAMillisecond as DateTime2
Select @RightNow = Getdate()
Select @RightNowPlusAMillisecond = DateAdd(millisecond,1,@RightNow)
Print @RightNow
Print @RightNowPlusAMillisecond
Run Code Online (Sandbox Code Playgroud)
结果:
2019-07-23 08:25:38.3500000
2019-07-23 08:25:38.3510000
Run Code Online (Sandbox Code Playgroud)
笔记:
正如 Forrest 在另一个答案中指出的那样,datetime数据类型不保证毫秒精度。它舍入到 .000、.003 或 0.007 秒的增量。如果您想要毫秒精度,请使用datetime2.
小智 13
@Doug-Deden的起点是正确的,但我只是想尝试回答我认为的问题的初衷——如何将其应用于每行增加毫秒的结果集。
在这种情况下,您可以使用ROW_NUMBER和公共表表达式(根据需要编辑表结构,包括连接等)。
选择显示值:
;WITH CTE AS (
SELECT t.my_id, t.my_date_column, ROW_NUMBER() OVER (ORDER BY my_date_column, my_id DESC) AS R
FROM Table1 t
)
SELECT TOP 1000 *, DATEADD(MILLISECOND, R, CAST(my_date_column AS datetime2)) [new_date]
FROM CTE
ORDER BY my_date_column
Run Code Online (Sandbox Code Playgroud)
更新连接回原始表:
;WITH CTE AS (
SELECT t.my_id, t.my_date_column, ROW_NUMBER() OVER (ORDER BY my_date_column, my_id DESC) AS R
FROM Table1 t
)
UPDATE t SET
my_date_column = DATEADD(MILLISECOND, R, CAST(my_date_column AS datetime2))
FROM CTE c
JOIN Table1 t ON c.my_id = t.my_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10447 次 |
| 最近记录: |