>

다음 값을 날짜/시간으로 변환하도록 도와주세요 :

DayLastAccessed
-23569
-23789
-23629
-23564
-23732
0
0

위의 열은 SQL Server에서 smallint 유형입니다.

다음 쿼리를 사용하여 변환하지만 운이 없습니다 :

select DayLastAccessed, cast(DayLastAccessed as datetime) from Webs

이 문제를 도와주세요. 미리 감사드립니다.


  • 답변 # 1

    와이즈 비즈  데이터 형식은 msb (가장 중요한 비트)를 사용하여 값의 부호를 나타냅니다. 따라서 값의 범위는 -2 ^ 15 (-32,768)에서 2 ^ 15-1 (32,767)입니다.

    값이 부호없는 정수로 변환되면이 값은 1900-01-01 이후의 일 수 (많은 Windows 앱에서 사용되는 표준 "에포크 (epoch)"값)처럼 보입니다.

    smallint 의 유효 범위를 상당히 쉽게 변환 할 수 있습니다  이것을 사용하여 날짜 값 :

    smallint
    
    

    질문에 나와있는 값은 다음과 같습니다.

    DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23732), 0), 0))
    
    
    ╔ =============================
    ║ 2014-11-26 00 : 00 : 00.000 ║
    ║ 2014-04-20 00 : 00 : 00.000 ║
    ║ 2014-09-27 00 : 00 : 00.000 ║
    ║ 2014-12-01 00 : 00 : 00.000 ║
    ║ 2014-06-16 00 : 00 : 00.000 ║
    ╚ ============================

    라고 말했지만,이 날짜가 구현에 정확한지 말하기는 불가능합니다. 다른 맥락이 없으면 결정적으로 말할 수 없습니다.

    SELECT DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23569), 0), 0)) SELECT DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23789), 0), 0)) SELECT DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23629), 0), 0)) SELECT DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23564), 0), 0)) SELECT DATEADD(DAY, 0, CONVERT(int, CONVERT(varbinary(2), CONVERT(smallint, -23732), 0), 0))

관련 자료

  • 이전 sql server - 응용 프로그램에 대한 데이터베이스 라이센스가 필요합니까?
  • 다음 postgresql - Oracle과 Postgres에서 쿼리 실행