SQL Server 날짜 및 시간 문자열 처리 및 변환

SQL Server에서는 날짜/시간 문자열 조작 및 변환을 위해 T-SQL 함수를 사용할 수 있습니다. 날짜 문자열에 시간 정보가 포함되어 있는지 확인하려면 T-SQL의 기본 제공 함수 CONVERT 및 TRY_CONVERT를 사용하고 시간 형식을 지정할 수 있습니다.

예를 들어 date_string이라는 날짜 문자열이 있다고 가정하면 다음 코드를 사용하여 시간 정보가 포함되어 있는지 확인할 수 있습니다.

SELECT TRY_CONVERT(datetime, date_string) AS result

date_string에 시간 정보가 있으면 유효한 datetime 값이 반환되고 그렇지 않으면 NULL이 반환됩니다.

또한 날짜 문자열의 시간 형식을 알고 있는 경우 다음과 같이 CONVERT 함수에서 시간 형식을 명시적으로 지정할 수도 있습니다.

SELECT CONVERT(datetime, date_string, 120) AS result

그 중 120은 시간 형식이 yyyy-mm-dd hh:mi:ss(즉, 시, 분, 초가 포함된 표준 날짜 및 시간 형식)임을 나타냅니다. date_string에 시간 정보가 있으면 유효한 datetime 값이 반환되고 그렇지 않으면 "1900-01-01 00:00:00.000"이 반환됩니다.
CONVERT 및 TRY_CONVERT 함수를 사용하는 것 외에도 ISDATE 함수를 사용하여 문자열이 올바른 날짜 및 시간 형식인지 확인할 수 있습니다.

ISDATE 함수는 문자열이 올바른 날짜 및 시간 형식임을 나타내기 위해 1을 반환하고, 문자열이 올바른 날짜 및 시간 형식이 아님을 나타내기 위해 0을 반환하며, 입력 값이 NULL임을 나타내기 위해 NULL을 반환합니다. 예를 들어:

SELECT ISDATE('2023-04-28 12:34:56') as result -- 返回1
SELECT ISDATE('2023/04/28') as result -- 返回1
SELECT ISDATE('2023-04-28T12:34:56Z') as result -- 返回0

위의 예에서 첫 번째 쿼리는 문자열 '2023-04-28 12:34:56'이 올바른 날짜 시간 값이기 때문에 1을 반환합니다. 문자열 '2023/04/28'도 날짜로 구문 분석할 수 있으므로 두 번째 쿼리도 1을 반환합니다. 문자열에 T 및 Z와 같은 잘못된 문자가 포함되어 있으므로 세 번째 쿼리는 0을 반환합니다.

ISDATE 함수는 시간대 정보가 포함된 ISO 8601 날짜-시간 형식(예: '2022-12-31T23:59:59+08 : 00'). 따라서 ISDATE 함수를 사용하여 날짜 및 시간 문자열을 판단할 때 처리하는 데이터 유형 및 형식을 이해하고 적절한 테스트 및 검증을 수행하는 것이 좋습니다.

또한 datetime 문자열을 특정 datetime 유형으로 변환해야 하는 경우 CAST 또는 CONVERT 함수를 사용할 수도 있습니다. 예를 들어:

-- 将日期时间字符串转换为datetime类型
SELECT CAST('2023-04-28 12:34:56' AS datetime) AS result

-- 将日期时间字符串转换为date类型
SELECT CONVERT(date, '2023-04-28') AS result

-- 将日期时间字符串转换为time类型
SELECT CONVERT(time, '12:34:56') AS result

위의 예에서 첫 번째 쿼리는 datetime 값 "2023-04-28 12:34:56"을 나타내는 datetime 유형의 값을 반환하고 두 번째 쿼리는 "2023-04-28"을 나타내는 날짜 유형의 값을 반환합니다. ; 세 번째 쿼리는 "12:34:56"의 시간 값을 나타내는 시간 유형의 값을 반환합니다.

유형 변환을 위해 CAST 또는 CONVERT 함수를 사용할 때 입력 문자열 형식이 올바르지 않으면 예외가 발생한다는 점에 유의해야 합니다. 따라서 비정상적인 상황을 피하기 위해 TRY_CONVERT 또는 ISDATE와 같은 함수를 사용하여 문자열이 유효한 날짜 및 시간 형식인지 판단하는 것이 좋습니다.
또한 형식화된 날짜 및 시간 값을 출력해야 하는 경우 CONVERT 함수를 사용하고 변환 형식을 지정하여 원하는 출력 결과를 얻을 수 있습니다. 예를 들어:

-- 将datetime类型转换为字符串类型,输出yyyy-mm-dd格式
SELECT CONVERT(varchar(10), GETDATE(), 120) AS result

-- 将datetime类型转换为字符串类型,输出yyyy年mm月dd日 hh时mi分ss秒格式
SELECT CONVERT(varchar(30), GETDATE(), 121) AS result

-- 将time类型转换为字符串类型,输出hh:mm:ss格式
SELECT CONVERT(varchar(8), CAST('12:34:56' AS time), 108) AS result

위의 예에서 첫 번째 쿼리는 "yyyy-mm-dd"(예: "2023-04-28") 형식으로 현재 날짜의 문자열 표현을 반환하고 두 번째 쿼리는 현재 날짜 시간의 문자열 표현을 반환합니다. 형식은 "yyyy 년 mm 월 dd 일 hh 시간 mi ss 초"(예: "April 28, 2023 13:24:06")입니다. 세 번째 쿼리는 시간 문자열을 반환하며 시간 값 "12:34를 나타냅니다. :56".

유형 변환 및 형식화된 출력에 CONVERT 함수를 사용할 때 다른 형식 코드를 지정하면 다른 출력 결과를 얻을 수 있습니다. 자세한 내용은 Microsoft SQL Server 설명서에서 CONVERT 및 CAST 함수에 대한 설명서를 참조하십시오.
또한 datetime 값을 더하고 빼야 하는 경우 T-SQL의 기본 제공 DATEADD 및 DATEDIFF 함수를 사용할 수 있습니다. 이 두 함수는 datetime 값에서 지정된 시간 간격을 증가 또는 감소시키고 각각 두 datetime 값 사이의 시간 간격을 계산하는 데 사용됩니다.

예를 들어 date라는 datetime 변수가 있는 경우 다음 코드를 사용하여 1일씩 증가시키고 결과를 출력할 수 있습니다.

SET @date = DATEADD(day, 1, @date)
SELECT @date AS result

위 코드에서 DATEADD 함수의 첫 번째 매개변수는 증가 또는 감소할 시간 간격 단위(day는 일 수를 나타냄)를 나타내고, 두 번째 매개변수는 증가 또는 감소할 시간 간격 크기를 나타냅니다(1은 1일을 나타냄). , 세 번째 첫 번째 매개변수는 연산해야 하는 날짜-시간 값(즉, @date 변수)입니다.

또한 두 datetime 값 사이의 시간 간격을 계산해야 하는 경우 DATEDIFF 함수를 사용할 수 있습니다. 예를 들어 다음 코드는 두 datetime 값 사이의 차이를 초 단위로 계산합니다.

DECLARE @start datetime = '2023-04-28 12:00:00'
DECLARE @end datetime = '2023-04-28 12:01:00'

SELECT DATEDIFF(second, @start, @end) AS result

위의 코드에서 DATEDIFF 함수의 첫 번째 매개변수는 계산할 시간 간격 단위(두 번째는 초 수를 나타냄)를 나타내고 두 번째 및 세 번째 매개변수는 각각 시간을 계산할 시작 날짜 및 시간 값과 종료 날짜입니다. 값.

날짜 및 시간 연산에 DATEADD 및 DATEDIFF 함수를 사용할 때 비정상적인 상황을 피하기 위해 입력 매개변수 유형 및 형식이 올바른지 확인해야 합니다. 또한 SQL Server 버전에 따라 날짜 및 시간 작업에 대한 지원이 약간 다를 수 있으므로 사용 중인 버전에 따라 문의하고 테스트하십시오.

추천

출처blog.csdn.net/baidu_38495508/article/details/130444319