Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Неявно преобразуване на изходния формат на SSIS за дата и час

Обща информация

Това са форматите по подразбиране на типовете данни за дата и време (при конвертиране от низ)

DT_DBDATE
yyyy-mm-dd

DT_FILETIME
yyyy-mm-dd hh:mm:ss:fff

DT_DBTIME
hh:mm:ss

DT_DBTIME2
hh:mm:ss[.fffffff]

DT_DBTIMESTAMP
yyyy-mm-dd hh:mm:ss[.fff]

DT_DBTIMESTAMP2
yyyy-mm-dd hh:mm:ss[.fffffff]

DT_DBTIMESTAMPOFFSET
yyyy-mm-dd hh:mm:ss[.fffffff] [{+|-} hh:mm]

Забележка:DT_DATE и DT_DBTIMESTAMP имат същия метод SET

И мисля, че преобразуването на низ към дата зависи и от текущата ви информация за култура

По-подробна информация можете да намерите тук

  • Типове данни на Integration Services
  • ПРЕВОД НА ТИПОВЕ ДАННИ SSIS КЪМ SQL СЪРВЪР

Експерименти :

След като прочетох коментара ви, не намерих статия, свързана с въпроса ви, затова направих следните експерименти:

Неявно преобразуване на дата и час в SSIS

създадох пакет SSIS с Dataflowtask. в тази задача на поток от данни създадох компонент на скрипт (като източник) и дестинация на плосък файл. Скриптът има една изходна колона OutDate от тип DT_DbTimeStamp Вътре в скрипта използвах следния код:

Private dtDate As Date = #01/01/2016#

Public Overrides Sub CreateNewOutputRows()

    Output0Buffer.AddRow()


    Using sw As New IO.StreamWriter("D:\Result.txt", False)
        sw.WriteLine("CultureInfo;Date;Format;Accepted")
        sw.Close()
    End Using


    For Each ci As System.Globalization.CultureInfo In System.Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)

        For Each strFormat As String In ci.DateTimeFormat.GetAllDateTimePatterns

            Dim boolResult As Boolean = True
            Try


                Output0Buffer.OutDate = dtDate.ToString(strFormat)

                boolResult = True

            Catch ex As Exception

                boolResult = False



            End Try

            Using sw As New IO.StreamWriter("D:\Result.txt", True)
                sw.WriteLine(ci.Name & ";" & dtDate.ToString(strFormat) & ";" & strFormat & ";" & boolResult.ToString)
                sw.Close()
            End Using

        Next



    Next



End Sub

Първо преглеждам цялата информация за културата и получавам всички свързани с нея формати за дата и час и ги преглеждам. Тогава се опитвам да конвертирам датата dtDate деклариран към форматиран низ и го присвоете на колоната Output.

Така че, ако присвояването на стойност на низ с определен формат към изходната колона DT_DBTIMESTAMP е прието, това означава, че форматът е имплицитно преобразуван

Output0Buffer.OutDate = dtDate.ToString(strFormat)

А ето и връзката към файла с резултати:

  • Result.txt

Неявно преобразуване на дата и време на SQL сървър

Има два формата на низове за дата и час, които се интерпретират правилно с всяка езикова настройка.

yyyyMMdd
yyyy-MM-ddTHH:mm:ss    (ISO8601)

Също така можете да повторите същия експеримент, но този път като създадете SqlCommand и изпълнението му:

Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"

sqlCmd.ExecuteReader()

По този начин можете, ако sqlcmd хвърли изключение, това означава, че форматът не може да бъде преобразуван.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върна множество набори от резултати със SqlCommand?

  2. Кога трябва да използвам CROSS APPLY над INNER JOIN?

  3. Използвайте OBJECTPROPERTY(), за да определите дали даден обект е изглед в SQL Server

  4. Събития на изчакване на SQL сървър -2

  5. Изчислете текущата сума в SQL Server