2017-09-18 9 views
0

dd/MM/yyyy HH:MM:ss.FFFFFFF 형식으로 데이터베이스의 날짜 필드를 업데이트하는 명령문을 작성하는 방법.사용자 정의 형식 (dd/MM/yyyy HH : MM : ss.FFFFFFF)으로 타임 스탬프 업데이트

SQL 오류 [8152] [22001] :

은 내가

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

그러나 반환 오류로 시도

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

요구] 문자열을 반환 선택 쿼리를 문자열 또는 2 진 데이터가 절단됩니다. com.microsoft.sqlserver.jdbc.SQLServerException : 문자열 또는 이진 데이터 잘립니다.

내 필드 데이터 형식

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; 

CURRENT_TIMESTAMP의 기능은 3 진수를 반환 할 때 FFFFFFF을 요청 않는 이유는 MSSQL 2016

+2

데이터 유형은 무엇입니까? 그것이'datetime2'라면 꼭 'varchar' 값으로 갱신하고있는 것일까 요? – HoneyBadger

+0

내 질문에 데이터 형식을 추가했습니다. @HoneyBadger –

+1

우선, 왜 datetime을 varchar에 저장합니까? 그건 말이되지 않는 것 같습니다. 그럼'varchar (16)'? 'dd/MM/yyyy HH : MM : ss.FFFFFFF'는 27 자입니다. - 9자를 너의 유형에 비해 너무 많이. –

답변

1

을 사용하고 VARCHAR (27)입니까? 더 나은 정밀도를 얻으려면 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 테이블 추가 –