2016-09-16 6 views
0

SQL을 사용하면 날짜 뒤에 'th' 'rd'및 'st'를 제거하는 우아한 방법이 있습니까? 여기 내가 어떻게하는지,하지만 난 차라리 정규식 리콜 (아래 예제) 같은 것을 할 것입니다.sql 날짜 형식 patindex regex 바꾸기

while 루프가있는 기능을 사용하지 마십시오. 나는 이미 그 해결책들을 보았고 나는 덜 못생긴 것을 찾고있다.

select Replace('september 8th, 2016', Substring('september 8th, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'september 8th, 2016'), 2), '') statdate2 

리콜를 사용하는 경우 나 SQL 예를 들어 기계가 내 패턴이 풀 수있는 그대로

/(\s[0-9]+)[a-z,A-Z]{2}\,/ 

및 날짜 번호가 교체

$1, 

으로 무엇인지 기억 아래와 같이 뭔가를 할 수 어떤 두 문자로든 시간의 99 %에 해당하는 쉼표가 올 수 있지만 사용자가 그 달 후에 쉼표를 넣는 원하지 않는 잘못된 날짜 형식과 정확히 일치합니다.

답변

0

그럼 정규식 리콜을 사용하는 CLR 함수를 작성할 수 있습니다.

그런데 현재 검색어는 전체 날짜 문자열에서 대체됩니다.

바꾸려는 접미사가 월 이름에있는 경우 문제가됩니다. 나는이 같은, 8 월 1 일에 로직을 실행 예를 들어

:

select Replace('august 1st, 2016', Substring('august 1st, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'august 1st, 2016'), 2), '') statdate2 

내가 얻을 :

augu 1, 2016

당신이 비를 원하는 경우 CLR 솔루션을 사용하는 경우 REPLACE()를 사용하는 대신 문자열에서 문자의 위치를 ​​제거해야 할 수 있습니다. 의미는 접미사 앞에 모든 문자를 가져다가 접미사 뒤의 모든 문자와 연결합니다. 예쁘지는 않겠지 만, 제가 말했듯이, 당신이 예쁘다면 CLR로 갈 수 있습니다.

+0

감사합니다. 예, CLR을 피하고 싶습니다. BTW, 나는 SQL Mgmt Studio에서 SQL을 실행했고 숫자 접미어를 대체했습니다. –

+0

이것은 실제로 프론트 엔드에서 처리되어야하는 종류의 것입니다. SQL은 이러한 종류의 작업을 의미하지 않습니다. –

+0

동의하지만 프런트 엔드를 제어하지 않습니다. –