IT TIP

SQL Server의 타임 스탬프 열을 datetime 형식으로 변환하는 방법

itqueen 2020. 10. 17. 12:41
반응형

SQL Server의 타임 스탬프 열을 datetime 형식으로 변환하는 방법


SQL Server가와 같은 타임 스탬프를 반환 'Nov 14 2011 03:12:12:947PM'하므로 문자열을 'Ymd H : i : s'와 같은 날짜 형식으로 쉽게 변환 할 수있는 방법이 있습니까?

지금까지 사용

date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))

SQL Server의 TIMESTAMP데이터 유형은 날짜 및 시간과 관련없습니다 !

연속 된 8 바이트 정수의 16 진수 표현 일뿐입니다. 행이 읽힌 이후로 변경되지 않았는지 확인하는 데만 유용합니다.

16 진수 정수를 읽거나 BIGINT. 예로서:

SELECT CAST (0x0000000017E30D64 AS BIGINT)

결과는

400756068

최신 버전의 SQL Server에서는 이것이 RowVersion실제로 호출 되기 때문에 호출 됩니다. ROWVERSIONMSDN 문서를 참조하십시오 .

데이터베이스 내에서 자동으로 생성 된 고유 한 이진 숫자를 노출하는 데이터 형식입니다. rowversion은 일반적으로 테이블 행의 버전 스탬프를위한 메커니즘으로 사용됩니다. rowversion 데이터 유형은 단지 증가하는 숫자이며 날짜 나 시간을 보존하지 않습니다 . 날짜 또는 시간을 기록하려면 datetime2 데이터 유형을 사용하십시오.

따라서 SQL Server 를 날짜 / 시간으로 변환 수 없습니다TIMESTAMP . 날짜 / 시간이 아닙니다.

그러나 타임 스탬프를 말하고 있지만 실제로는 DATETIME을 의미하는 경우 MSDN 도움말 CAST 및 CONVERT 항목에 설명 된 유효한 날짜 형식을 사용할 수 있습니다 . 이들은 SQL Server에서 "즉시"정의되고 지원됩니다. 다른 것은 지원되지 않습니다. 예를 들어 많은 수동 캐스팅 및 연결을 수행해야합니다 (권장하지 않음).

찾고있는 형식은 ODBC 표준 (스타일 = 121) 과 비슷합니다 .

DECLARE @today DATETIME = SYSDATETIME()

SELECT CONVERT(VARCHAR(50), @today, 121)

제공합니다 :

2011-11-14 10:29:00.470

SQL Server 2012는 마침내FORMAT 사용자 지정 서식을 수행 하는 기능갖게됩니다.


캐스트를 사용하면 타임 스탬프 필드에서 날짜를 가져올 수 있습니다.

SELECT CAST(timestamp_field AS DATE) FROM tbl_name

동료들이이 작업을 도와주었습니다.

select CONVERT(VARCHAR(10), <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(VARCHAR(10), <tms_column>, 112);

또는

select CONVERT(DATE, <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(DATE, <tms_column>, 112);

이 메시지를 제외하고 잘 작동합니다.

데이터 형식 varchar에서 타임 스탬프로 암시 적으로 변환 할 수 없습니다. 이 쿼리를 실행하려면 CONVERT 함수를 사용하십시오.

예, TIMESTAMP( RowVersion)는 DATE 아닙니다 . :)

솔직히 말해서 나는 그것을 날짜로 변환하는 방법을 찾기 위해 꽤 시간을 허비했습니다.

가장 좋은 방법은 변환 INT하고 비교하는 것입니다. 이것이 바로이 유형의 의미입니다.

당신이 데이트를 원한다면-그냥 Datetime칼럼을 추가하고 행복하게 살기 :)

건배 맥


"당신은 그 단어를 계속 사용하고 있습니다. 당신이 의미한다고 생각하는 것을 의미하지는 않습니다." — 이니 고 몬토야

타임 스탬프는 marc_s가 원래 말했듯이 시간과 전혀 관계가 없습니다.

declare @Test table (
     TestId int identity(1,1) primary key clustered
    ,Ts     timestamp
    ,CurrentDt datetime default getdate()
    ,Something varchar(max)
)

insert into @Test (Something)
    select name from sys.tables
waitfor delay '00:00:10'

insert into @Test (Something)
    select name from sys.tables

select * from @Test

Notice in the output that Ts (hex) increments by one for each record, but the actual time has a gap of 10 seconds. If it were related to time then there would be a gap in the timestamp to correspond with the difference in the time.


The simplest way of doing this is:

SELECT id,name,FROM_UNIXTIME(registration_date) FROM `tbl_registration`;

This gives the date column atleast in a readable format. Further if you want to change te format click here.


Some of them actually does covert to a date-time from SQL Server 2008 onwards.

Try the following SQL query and you will see for yourself:

SELECT CAST (0x00009CEF00A25634 AS datetime)

The above will result in 2009-12-30 09:51:03:000 but I have encountered ones that actually don't map to a date-time.


Why not try FROM_UNIXTIME(unix_timestamp, format)?


Not sure if I'm missing something here but can't you just convert the timestamp like this:

CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110)

참고URL : https://stackoverflow.com/questions/8119386/how-to-convert-sql-servers-timestamp-column-to-datetime-format

반응형