[sql] SQL Server에 날짜 시간을 삽입하는 SQL 쿼리

datetime아래의 SQL 쿼리를 사용하여 테이블 (SQL Server)에 값 을 삽입하고 싶습니다

insert into table1(approvaldate)values(18-06-12 10:34:09 AM);

그러나이 오류 메시지가 나타납니다. Incorrect syntax near '10'.

나는 따옴표와 함께 그것을 시도

insert into table1(approvaldate)values('18-06-12 10:34:09 AM');

이 오류 메시지가 나타납니다 Cannot convert varchar to datetime

친절하게 도와주세요! 감사.



답변

SQL Server에서 명확한 날짜 결정을 위해 YYYYMMDD를 사용하려고합니다.

insert into table1(approvaldate)values('20120618 10:34:09 AM');

dd-mm-yy hh:mm:ss xm형식 과 결혼 한 경우 특정 스타일과 함께 CONVERT를 사용해야합니다.

insert table1 (approvaldate)
       values (convert(datetime,'18-06-12 10:34:09 PM',5));

5여기 이탈리아 날짜 스타일이 있습니다. 글쎄, 이탈리아 인뿐만 아니라 그것이 Books Online 의 문화이기 때문 입니다.


답변

문자열 리터럴에 대한 언어 독립적 선택은 국제 표준 ISO 8601 형식 “YYYY-MM-DDThh : mm : ss”입니다. 아래 SQL 쿼리를 사용하여 형식을 테스트했으며 실제로 sys.syslanguages의 모든 SQL 언어에서 작동합니다 .

declare @sql nvarchar(4000)

declare @LangID smallint
declare @Alias sysname

declare @MaxLangID smallint
select @MaxLangID = max(langid) from sys.syslanguages

set @LangID = 0

while @LangID <= @MaxLangID
begin

    select @Alias = alias
    from sys.syslanguages
    where langid = @LangID

    if @Alias is not null
    begin

        begin try
            set @sql = N'declare @TestLang table (langdate datetime)
    set language ''' + @alias + N''';
    insert into @TestLang (langdate)
    values (''2012-06-18T10:34:09'')'
            print 'Testing ' + @Alias

            exec sp_executesql @sql
        end try
        begin catch
            print 'Error in language ' + @Alias
            print ERROR_MESSAGE()
        end catch
    end

    select @LangID = min(langid)
    from sys.syslanguages
    where langid > @LangID
end

Microsoft TechNet 의 문자열 리터럴 날짜 및 시간 형식 섹션에 따르면 표준 ANSI 표준 SQL 날짜 형식 “YYYY-MM-DD hh : mm : ss”는 “다국어”로되어 있습니다. 그러나 동일한 쿼리를 사용하면 ANSI 형식이 모든 SQL 언어에서 작동하지 않습니다.

예를 들어 덴마크어에서는 다음과 같은 많은 오류가 발생합니다.

언어 덴마크어 오류 varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어난 값이 발생했습니다.

SQL Server에서 실행하기 위해 C #으로 쿼리를 작성하고 ISO 8601 형식으로 날짜를 전달해야하는 경우 정렬 가능한 “s”형식 지정자를 사용하십시오 .

string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);


답변

Management Studio는 다음과 같은 스크립트를 만듭니다.

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))


답변

당신은 그것을 추가해야합니다

insert into table1(date1) values('12-mar-2013');


답변

변환을 사용할 필요가 없습니다. 간단히 ISO 8601 형식으로 인용 날짜로 표시하십시오.
이렇게 :

select * from table1 where somedate between '2000/01/01' and '2099/12/31'

구분 기호는 a /여야하며 작은 '따옴표로 묶어야합니다.


답변

프로그래밍 언어를 통해 값을 저장하는 경우

다음은 C #의 예입니다.

날짜를 저장하려면 먼저 변환 한 다음 저장해야합니다

insert table1 (foodate)
   values (FooDate.ToString("MM/dd/yyyy"));

FooDate는 날짜 형식으로 날짜를 포함하는 날짜 / 시간 변수입니다.


답변

더 일반적인 문제가 발생합니다. 다른 날짜 시간 형식을 가져 와서 날짜 시간 열에 삽입하십시오. 마지막으로 스칼라 함수가 된이 문을 사용하여 문제를 해결했습니다 (ODBC 표준, 미국, ANSI 및 영국 \ 프랜차이즈 날짜 스타일과 관련이 있습니다-확장 가능).

insert into <tableName>(<dateTime column>) values(coalesce
(TRY_CONVERT(datetime, <DateString, 121), TRY_CONVERT(datetime, <DateString>,
101), TRY_CONVERT(datetime, <DateString>, 102), TRY_CONVERT(datetime,
<DateString>, 103)))