Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Định dạng nguồn SSIS Chuyển đổi ngầm định cho ngày giờ

Thông tin chung

Đây là các định dạng mặc định của kiểu dữ liệu datetimes (khi chuyển đổi từ chuỗi)

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]

Lưu ý:DT_DATE và DT_DBTIMESTAMP có cùng một phương pháp SET

Và tôi nghĩ rằng việc chuyển đổi chuỗi thành ngày cũng tùy thuộc vào thông tin văn hóa hiện tại của bạn

Thông tin chi tiết hơn được tìm thấy tại đây

  • Các loại dữ liệu dịch vụ tích hợp
  • DỊCH THUẬT LOẠI DỮ LIỆU SSIS SANG MÁY CHỦ SQL

Thử nghiệm:

Sau khi đọc bình luận của bạn, tôi không tìm thấy bất kỳ bài viết nào liên quan đến câu hỏi của bạn nên tôi đã thực hiện các thử nghiệm sau:

Chuyển đổi theo ngày giờ ngầm định của SSIS

tôi đã tạo một gói SSIS với một Dataflowtask. trong dataflowtask này, tôi đã tạo Thành phần tập lệnh (làm Nguồn) và Đích đến của tệp phẳng. Tập lệnh có một cột đầu ra OutDate thuộc loại DT_DbTimeStamp Bên trong tập lệnh, tôi đã sử dụng mã sau:

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

Đầu tiên, tôi đang lặp lại tất cả thông tin văn hóa và tôi đang Lấy tất cả các định dạng ngày giờ liên quan đến nó và lặp lại chúng. Sau đó, tôi đang cố chuyển đổi ngày dtDate được khai báo cho một chuỗi được định dạng và gán nó vào cột Đầu ra.

Vì vậy, nếu việc gán giá trị chuỗi với định dạng được chỉ định cho cột đầu ra DT_DBTIMESTAMP được chấp nhận, điều đó có nghĩa là định dạng được chuyển đổi ngầm định

Output0Buffer.OutDate = dtDate.ToString(strFormat)

Và đây là liên kết của tệp kết quả:

  • Result.txt

Chuyển đổi ngầm định về ngày giờ của máy chủ SQL

Có hai định dạng chuỗi ngày giờ được diễn giải chính xác với bất kỳ cài đặt ngôn ngữ nào.

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

Ngoài ra, bạn có thể lặp lại cùng một thử nghiệm nhưng lần này bằng cách tạo SqlCommand và thực hiện nó:

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

sqlCmd.ExecuteReader()

Bằng cách đó, bạn có thể làm được nếu sqlcmd ném ra một ngoại lệ, điều đó có nghĩa là không thể chuyển đổi định dạng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 7 cách tìm hàng trùng lặp trong SQL Server khi bỏ qua bất kỳ khóa chính nào

  2. Khám phá các thao tác lập chỉ mục trực tuyến cấp độ phân vùng trong SQL Server 2014 CTP1

  3. Làm cách nào để sử dụng tính năng xóa theo tầng với SQL Server?

  4. Làm cách nào để tạo một ràng buộc duy nhất cũng cho phép null?

  5. Nội bộ của bảy loại máy chủ SQL - Phần 2