IT story

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

hot-time 2020. 7. 14. 08:01
반응형

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 데이터 형식으로 변환하면 범위를 벗어난 값이 발생했습니다.

If you want to build a query in C# to run on SQL Server, and you need to pass a date in the ISO 8601 format, use the Sortable "s" format specifier:

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

Management studio creates scripts like:

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

you need to add it like

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

No need to use convert. Simply list it as a quoted date in ISO 8601 format.
Like so:

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

The separator needs to be a / and it needs to be surrounded by single ' quotes.


If you are storing values via any programming language

Here is an example in C#

To store date you have to convert it first and then store it

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

FooDate is datetime variable which contains your date in your format.


I encounter into a more generic problem: getting different (and not necessarily known) datetime formats and insert them into datetime column. I've solved it using this statement, which was finally became a scalar function (relevant for ODBC canonical, american, ANSI and british\franch date style - can be expanded):

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))) 

참고URL : https://stackoverflow.com/questions/12957635/sql-query-to-insert-datetime-in-sql-server

반응형