을 위한 최선의 방법 varchar 날짜가 유효성 검사에는 Sybase(T-SQL)?
-
08-06-2019 - |
문제
는 저장 프로시저를 사용하고 있는 그것의 매개 변수 varchar 해야하는 캐스팅으로 datetime 나중에 사용:
SET @the_date = CAST(@date_string AS DATETIME)
나는 예상 날짜할 문자열 형식으로 제공되"DD-MON-YYYY",그러나 노력하는 코드를 방어적으로,어떤 이유로 그것은 있을 수 없는 성공적으로 캐스팅,내가 원하는 기본 시스템 날짜와 계속합니다.PL/SQL 사용할 수 있는 예외 처리 이를 달성을 할 수 있는 이 비교적 쉽게와 정기적인 표정이 너무하지만,제한된 패턴 일치하는 지원자의 의 Sybase 지 않게 이렇게 하고 난에 의존할 수 없는 타사 라이브러리 또는 확장 합니다.거기에 간단한 방법으로 이 일을 T-SQL?
NB:사용 Sybase ASE12.5.3 없 ISDATE 기능
해결책
는 내가 하는 유사한 문제입니다.할 수 있습니다 다음과 같은 것이 가능합니다.
SET arithabort arith_overflow off
SET @the_date = CAST(@date_string AS DATETIME)
IF @the_date is NULL
set @the_date = getdate()
SET arithabort arith_overflow on
그러나,이것에서 잘 작동하지 않는 선택합니다.그것은에서 잘 작동 커서(부)또는 논리에서 전/후 SQL 합니다.
다른 팁
나의 선한 경우,질문에 대해 Microsoft SQL Server 그리고 우리는에서 이었습니다!
Sybase,슬프게도,전체적인'뿐 데이터베이스는 이러한 일이기 때문에 대한 1997 년,사실,제공 또는다.
만약 입력 형식으로 단순히'DD-MON-YYYY'그리고 예외 없이,나는 생각한 공정한 금액의 유효성 검사가 달성에 의해 슬라이스를 사용하여 입력 SUBSTR()후,첫 번째 하고 있는 몇 가지 간단한 등과 같은 것들을 확인 길이 있습니다.
내가 생각하는 최근의 자료를 Sybase SQL(디 11,예를 들어)가 정규 표현식을 지원,그러나,비록 그것을 때부터 나는 고통 T-SQL.일부를 인터넷 검색을 나에서 오히려 더다.
그것은 보인다 당신이 붙어있을 것 압연하다.
당신은 아마 사용 이 하는 것으로 시작합니다.
할 수 없는 다음과 같은 것이 가능합니다.
SELECT @the_date = CASE @date_string
WHEN '[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9]'
THEN CONVERT(datetime, @date_string)
ELSE GETDATE()
END
?
발견 이에서 두 번째 결과 Google 에서 검색할 때"유효성 검사 날짜 string sql".
----Invalid date
SELECT ISDATE('30/2/2007')
RETURNS : 0 (Zero)
----Valid date
SELECT ISDATE('12/12/20007')
RETURNS : 1 (ONE)
----Invalid DataType
SELECT ISDATE('SQL')
RETURNS : 0 (Zero)
는지 확인 SQL 서버가 알고있는 주문의 일 동안,달과 년의 문자열에 의해 실행
SET DATEFORMAT mdy;
당신이 시도했다 convert
대 cast
?
select convert( datetime , @date_string )