다음 표와 표 데이터가 있습니다. 그 후 case를 사용하여 select 문을 실행하면 오류가 발생합니다.
The conversion of a date data type to a datetime data type resulted in an out-of-range value.
그러나 두 번째 사례를 언급하면 선택이 잘 작동합니다. 이 문제를 이해하도록 도와주세요.
CREATE TABLE TEST (
ID varchar(20),
T_Date date,
FLAG varchar(20)
);
insert into TEST values('1234', '0001-01-01', NULL);
select t.T_Date, t.FLAG,
CASE
WHEN t.FLAG IS NULL AND t.T_Date IS NOT NULL AND t.T_Date != '2001-01-01' THEN t.T_Date
WHEN t.FLAG IS NULL AND (t.T_Date IS NULL OR (t.T_Date IS NOT NULL AND t.T_Date = '2001-01-01')) THEN CONVERT(datetime, '20201216', 112) + 10
END as t_date
FROM TEST t
- 답변 # 1
- 답변 # 2
ㅏ
CASE
expression은 어떤 절이 일치하는지에 관계없이 하나의 고정 된 유형의 값을 생성해야합니다.datetime
우선 순위가date
, 따라서 귀하의CASE
표현.ㅏ
datetime
1753 년 이전의 날짜를 저장할 수 없습니다.date
값은 1 년에 있습니다.제안 된대로 (최소 10 년 동안) :
Use the
time
,date
,datetime2
과datetimeoffset
새로운 작업을위한 데이터 유형.select t.T_Date, t.FLAG, CASE WHEN t.FLAG IS NULL AND t.T_Date IS NOT NULL AND t.T_Date != '2001-01-01' THEN t.T_Date WHEN t.FLAG IS NULL AND (t.T_Date IS NULL OR (t.T_Date IS NOT NULL AND t.T_Date = '2001-01-01')) THEN CONVERT(date, '20201226', 112) END as t_date FROM TEST t
관련 자료
- 겨울에서 여름 시간으로 시간이 변경 될 때 C # DateTime 변환
- python - valueerror 수정 방법 - 발견되지 않은 데이터가 남아 있습니다 : 날짜 시간 변환에서 (json에서) :플라스크?
- String to DateTime conversion in PowerShell - powershell에서 문자열을 datetime으로 변환 - 프랑스 데이트
- xcos의 expression block은 "scilab expression에 대한 답변이 잘못되었습니다"오류를 표시합니다
- 날짜/시간 문자열 변환 C # SQL 출력 매개 변수
- sql - 재무 기간의 날짜/시간 변환
- c# - 람다 식에서 nullable DateTime 캐스트
- javascript - 왜 같은 정규 표현식이 두 가지 다른 결과를 제공합니까?
- python - 장고 템플릿에서 날짜/시간 시간대 인식 개체를 잘못 변환
- sql server - SSIS의 표현식을 사용하여 문자열을 DateTime으로 변환 할 수 없음
- c# - 롤백 마이그레이션 오류 데이터 유형 datetime에서 int 로의 암시 적 변환은 허용되지 않습니다 이 쿼리를 실행하려면 CONVERT 함수를 사용하십시오
- python - autodesk forge - ipt에서 stl로 변환하면 오류가 발생 함 (unicodeencodeerror)
- python - datetimedatetime을 datetime으로 변환
- c# - 문자열을 datetime으로 변환하는 문제를 해결하는 방법은 무엇입니까?
- 데이터 유형 datetime에서 int 로의 SQL 암시 적 변환은 허용되지 않습니다 이 쿼리를 실행하려면 CONVERT 함수를 사용하십시오 오류
- c++ - SFML에서 RectangleShape로 만든 Tilegrid는 변환 오류를 발생시킵니다
때문에...마다의 지점
case
표현절대로 필요한 것동일한 데이터 유형을 반환합니다. 그래서 당신의 변환과 함께datetime
두 번째 분기에서는 SQL Server가 첫 번째 분기를datetime
또한 데이터 유형 우선 순위 때문입니다.그리고 첫 번째 브랜치에서
date
값, "0001-01-01",datetime
가장 낮은 값이datetime
처리 할 수있는 것은 "1753 년 1 월 1 일"입니다.또한 10을 추가 할 수 없습니다.
date
, 당신은 그래도datetime
허용합니다. 무엇을 추가하고 있습니까? 며칠? 시간? 의사록? 사용dateadd
에 올바르게 추가하는 기능date
.