SQL 문자열을 날짜로 변환

SQL 문자열을 날짜로 변환

이것은 며칠 동안 나를 정말 당황하게 만들었고 도움을 구하고 있습니다. SQL Server 2017을 사용하고 있습니다.

자유 형식 필드의 문자열을 처리하고 "dd/mm/yyyy" 형식의 날짜로 변환하거나 이 형식이 아닌 경우 텍스트를 그대로 표시하려고 합니다.

VIEW에 이것이 필요하므로 SET LANGUAGE를 사용할 수 없습니다. 사용하면 간단해 보이지만전환하다그리고날짜하지만 작동하지 않는 것 같습니다.

따라서 아래 코드 조각의 경우(이것은 VIEW에 있음을 기억하세요) 텍스트를 읽고 문자열이 날짜로 변환되면(예: "dd/mm/yyyy" 형식인 경우) 다음으로 변환을 실행합니다. Excel에서 (Connect SQL Sever 데이터베이스를 통해) 선택하기 위해 필요한 날짜 형식으로 날짜를 입력하고, 날짜로 변환되지 않으면 텍스트를 그대로 표시합니다.

create table dateTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
insert into dateTest1 (idx, dateStringTest) 
values (1, '13/01/2021'), (2, 'no'); 
 
 
select 
       case when isdate(convert(datetime, dateStringTest, 103)) = 1 
       then convert(datetime, dateStringTest, 103)
       else dateStringTest 
       end as dtres
from dateTest1 
--where idx = 1 
  
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string. 
-- this error happens for idx = 2. Idx = 1 works ok

이 문제에 대한 도움이 있으면 크게 감사하겠습니다.

미리 감사드립니다 폴

답변1

귀하의 데이터베이스가 이 작업을 수행하는 데 얼마나 적합한지 잘 모르겠습니다. SQL Server의 데이터 변환 기능은 다른 기능에 비해 약간 "서투르다".

그러나 데이터베이스의 관점에서 보면 다음과 같습니다.

뭔가 있다면추정된날짜, 그러면 그것해야한다날짜.
"누락"(즉, null 가능)할 ​​수 있지만 다른 것은 될 수 없습니다.
그 경우~이었다다른 것이면 치료하면 안 됩니다.~처럼날짜.

사용자는 입장할 수 없습니다날짜- 오직캐릭터 표현그들의.
응용 프로그램에서 [숫자 및] 날짜를 표시하려면 "방법"에 형식을 지정해야 합니다.
응용 프로그램에서 [숫자 및] 날짜를 읽으려면 "입력" 시 반대의 "형식 해제"(물론 유효성 검사)가 필요합니다.
데이터는언제나에 저장되다옳은데이터 유형 - "올바른 작업을 위한 올바른 도구".

자유 텍스트 구문 분석은아마응용 프로그램에서 가장 잘 수행되는 작업은 날짜 값을 추출하고 유효성을 검사하고 "형식을 취소"한 다음 저장하는 것입니다.

관련 정보