2017-09-18 91 views
0

如何編寫將使用dd/MM/yyyy HH:MM:ss.FFFFFFF格式更新數據庫中的日期字段的語句。使用自定義格式(dd/MM/yyyy HH:MM:ss.FFFFFFF)更新時間戳

我有一個返回需要串

SELECT FORMAT(CURRENT_TIMESTAMP, 'dd/MM/yyyy HH:MM:ss.FFFFFFF') 

update ORDER 
set timedate=FORMAT(CURRENT_TIMESTAMP, 'dd/MM/yyyy HH:MM:ss.FFFFFFF') 
WHERE ID='288' 

但返回錯誤試圖選擇查詢:

SQL錯誤[8152] [22001]:字符串或二進制數據將被截斷。 com.microsoft.sqlserver.jdbc.SQLServerException:將截斷字符串或​​二進制數據 。

我場的數據類型爲varchar 27

CREATE TABLE AYAM.dbo.ORDER (
ID int NOT NULL IDENTITY(1,1), 
TIMEDATE varchar(27) NOT NULL, 
CONSTRAINT PK_ORDER_DATA PRIMARY KEY (ID,TIMEDATE) 
) GO; 

我使用MSSQL 2016

+2

什麼是數據類型?如果它應該是'datetime2',爲什麼要用'varchar'值更新它? – HoneyBadger

+0

將數據類型添加到我的問題中@HoneyBadger –

+1

首先:爲什麼要將日期時間存儲在varchar中?這似乎沒有道理。那麼'varchar(16)'? 'dd/MM/yyyy HH:MM:ss.FFFFFFF'是27個字符長 - 9個字符對於您的類型來說太多了。 –

回答

1

你爲什麼問FFFFFFF時CURRENT_TIMESTAMP函數返回只有3個十進制數字?使用SYSDATETIME()函數可以獲得更好的精度。

我無法重新產生錯誤。你使用什麼SQL Server版本?

create table #test (timedate varchar(27)) 
insert into #test VALUES ('test'); 
update #test 
set timedate=FORMAT(SYSDATETIME(), 'dd/MM/yyyy HH:MM:ss.FFFFFFF') 
select * from #test 
drop table #test 

輸出是:18/09/2017 12:09:44.6914345

更新: 進行同樣的測試使用表結構來完成。沒有錯誤...

INSERT INTO dbo.[ORDER] (TIMEDATE) VALUES ('test') 
GO 300 


update [ORDER] 
set timedate=FORMAT(CURRENT_TIMESTAMP, 'dd/MM/yyyy HH:MM:ss.FFFFFFF') 
WHERE ID='288' 
+0

MSSQL 2016數據庫 –

+0

我也在2016年測試過它。你能否提供實際的表格定義? –

+0

添加了我的DDL表 –