如何将varchar'DDMMYYYY HH:MM:SS'转换为SQL Server中的DATETIME

时间:2016-09-18 13:32:49

标签: sql-server

我有一个struct PixelData { var a: UInt8 = 0 var r: UInt8 = 0 var g: UInt8 = 0 var b: UInt8 = 0 } func imageFromBitmap(pixels: [PixelData], width: Int, height: Int) -> UIImage? { assert(width > 0) assert(height > 0) let pixelDataSize = MemoryLayout<PixelData>.size assert(pixelDataSize == 4) assert(pixels.count == Int(width * height)) let data: Data = pixels.withUnsafeBufferPointer { return Data(buffer: $0) } let cfdata = NSData(data: data) as CFData let provider: CGDataProvider! = CGDataProvider(data: cfdata) if provider == nil { print("CGDataProvider is not supposed to be nil") return nil } let cgimage: CGImage! = CGImage( width: width, height: height, bitsPerComponent: 8, bitsPerPixel: 32, bytesPerRow: width * pixelDataSize, space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedFirst.rawValue), provider: provider, decode: nil, shouldInterpolate: true, intent: .defaultIntent ) if cgimage == nil { print("CGImage is not supposed to be nil") return nil } return UIImage(cgImage: cgimage) } 列,其日期格式为

varchar

例如,DDMMYYYY HH:MM:SS 我需要将其插入另一个表的30072016 23:59:59列中。

我尝试了各种DATETIME选项,但似乎都出现了这个错误

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的值

请帮助。

3 个答案:

答案 0 :(得分:2)

SQL Server 2012+中的一种方法是分别进行日期和时间转换:

select (datefromparts(substring(col, 5, 4) + 0, substring(col, 3, 2) + 0, left(col, 2)) +
        convert(time, right(col, 8))
       ) as dt_value

实际上,这可以在早期版本中使用,您只需要使用不同的功能,因为不支持datefromparts()

答案 1 :(得分:1)

以下是将CONVERT函数与样式 105

一起使用的方法
DECLARE @datetime varchar(50)='30072016 23:59:59'
SELECT CONVERT(datetime,stuff(stuff(@datetime,3,0,'-'),6,0,'-'),105)

由于您当前的日期时间格式与SQL SERVER中的任何本机日期时间格式都不匹配,因此我们需要转换为sql server可以读取的格式。

SQL SERVER可以阅读此格式DD-MM-YYYY HH:MM:SS。在-daymonth之间插入year使用STUFF功能。插入后我们可以将其转换为datetime

答案 2 :(得分:0)

这与SQL Server本身可解析的任何格式都不匹配。

因此,我的建议是:

  • 使用字符串操作(LEFTSUBSTRING)将其转换为 可由SQL Server本机解析的格式,例如{{1} (样式120,“ODBC规范”),

  • 然后使用YYYY-MM-DD HH:MM:SS将其转换为日期时间。