최소 날짜(1753년 1월 1일)를 반환하는 SQL Server 함수
datetime의 최소값(1753년 1월 1일)을 반환하는 SQL Server 함수를 찾고 있습니다.날짜 값을 스크립트에 하드코드하지 않는 것이 좋습니다.
그런 게 있나요? (비교하기 위해 C#에서는 그냥 할 수 있어요)DateTime.MinValue)
아니면 제가 직접 써야 하나요?
Microsoft SQL Server 2008 Express를 사용하고 있습니다.
다음과 같이 최소 날짜 값을 반환하는 사용자 정의 함수를 작성할 수 있습니다.
select cast(-53690 as datetime)
그런 다음 스크립트에서 이 기능을 사용합니다.이 기능을 변경할 필요가 있는 경우 변경할 수 있는 곳은 한 곳뿐입니다.
또는 보다 읽기 쉽게 하려면 다음 쿼리를 사용할 수 있습니다.
select cast('1753-1-1' as datetime)
기능 예시
create function dbo.DateTimeMinValue()
returns datetime as
begin
return (select cast(-53690 as datetime))
end
사용.
select dbo.DateTimeMinValue() as DateTimeMinValue
DateTimeMinValue
-----------------------
1753-01-01 00:00:00.000
SqlDateTime 오브젝트 보셨나요?사용하다SqlDateTime.MinValue
최소 날짜(1753년 1월 1일)를 취득합니다.
인정된 답변에 대해서는 평판이 좋지 않아 코멘트를 드릴 수 없기 때문에 답변으로 보내드립니다.
사용방법select cast('1753-1-1' as datetime)
는, YYY-MM-DD 형식의 데이터 스트링을 수신할 수 없는 지역 설정의 데이타베이스상에서 동작하고 있는 경우,
대신 를 사용합니다.select cast(-53690 as datetime)
또는Convert
지정된 날짜/시간 형식을 사용합니다.
기본 값으로 날짜 입력'yyyymmdd'
지역 문제를 피하기 위해:
select cast('17530101' as datetime)
네, TSQL이 다음과 같은 서비스를 제공받았으면 좋겠습니다.MinDate() = '00010101'
하지만 그런 행운은 없다.
다음은 최소 날짜 값을 가져오는 빠르고 읽기 쉬운 방법입니다.
주의: 이것은 결정론적 함수이므로 성능을 더욱 향상시키려면 반환값에 WITH SCHEMABINDIND를 적용하는 것이 좋습니다.
함수를 만듭니다.
CREATE FUNCTION MinDate()
RETURNS DATETIME WITH SCHEMABINDING
AS
BEGIN
RETURN CONVERT(DATETIME, -53690)
END
함수를 호출하다
dbo.MinDate()
예 1
PRINT dbo.MinDate()
예 2
PRINT 'The minimimum date allowed in an SQL database is ' + CONVERT(VARCHAR(MAX), dbo.MinDate())
예 3
SELECT * FROM Table WHERE DateValue > dbo.MinDate()
예 4
SELECT dbo.MinDate() AS MinDate
예 5
DECLARE @MinDate AS DATETIME = dbo.MinDate()
SELECT @MinDate AS MinDate
1753년 1월 1일이 아니라 datetime에 표시되는 cast("")를 선택합니다.이 경우 1900-01-01 00:00:00.000은 SQL Server에 의한 기본값을 제공합니다.(어쨌든 초기화되지 않은 것 같습니다.)
SQL Server에서 최소 날짜를 얻기 위해 사용하는 것입니다.세계화에 도움이 되는 것에 주의해 주세요.
CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
RETURN (SELECT
CAST('17530101' AS datetime))
END
콜 방법:
SELECT [dbo].[DateTimeMinValue]()
다음은 어떻습니까?
declare @dateTimeMin as DATETIME = datefromparts(1753, 1, 1);
select @dateTimeMin;
면책사항:다음 코드는 예쁘지 않습니다.Try/Catch 스테이트먼트에 의존하는 것은 좋은 방법이 아닙니다.또한 기능에는 Try/Catch 문장이 포함되지 않을 수 있으므로 원래 포스터의 기능 요구 사항을 충족하지 않습니다.
즉, 다음 SQL 코드는 매직 숫자를 사용하지 않고 최소 날짜 또는 최대 날짜(bonus)를 제공합니다.루프에 넣지 않는 한 속도는 문제가 되지 않습니다.여기에 기술문을 한 줄의 코드로 표시하므로 많은 공간을 소모하지 않고 메인 SP 자체에서 주의를 분산시키지 않고 쉽게 복사/붙여넣기 및 저장 프로시저에 삽입할 수 있습니다.
DECLARE @MinDate DATETIME = CONVERT(DATETIME, 0); BEGIN TRY WHILE (1=1) BEGIN SELECT @MinDate = DateAdd(YEAR, -1, @MinDate); END END TRY BEGIN CATCH END CATCH;
SELECT @MinDate
DECLARE @MaxDate DATETIME = GETDATE(); BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(YEAR,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(MONTH,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(DAY,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(HOUR,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(MINUTE,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(SECOND,1,@MaxDate); END END TRY BEGIN CATCH END CATCH; BEGIN TRY WHILE (1=1) BEGIN SET @MaxDate = DATEADD(ms,3,@MaxDate); END END TRY BEGIN CATCH END CATCH;
SELECT @MaxDate
" " 의 datetime
이전 버전과의 호환성이 깨지기 때문에 변경되지 않습니다.하드코드 할 수 있어요.
언급URL : https://stackoverflow.com/questions/3825893/sql-server-function-to-return-minimum-date-january-1-1753
'programing' 카테고리의 다른 글
UIButton의 배경 이미지로 사용할 UICollor에서 UIImage 만들기 (0) | 2023.04.20 |
---|---|
Excel 매크로(vba)의 restful API를 사용하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
섬네일 이미지 생성 (0) | 2023.04.20 |
두 날짜 간의 일/월/년(일자) 차이를 구하는 방법은 무엇입니까? (0) | 2023.04.20 |
왜 String을 사용합니까?== 이상입니까? (0) | 2023.04.20 |