문제

는 저장 프로시저를 사용하고 있는 그것의 매개 변수 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;

당신이 시도했다 convertcast?

select convert( datetime , @date_string ) 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top