我在表格中有一个日期列(格式yyyymmdd
),但它存储为nvarchar
。我尝试将其转换为date
并使用以下任一脚本进行清理:
convert(varchar(10), cast(ltrim(rtrim(replace([mydate], ''"'', ''''))) as datetime), 112) [mydate]
convert(nvarchar, cast(ltrim(rtrim(replace([mydate], ''"'', ''''))) as datetime), 112) [mydate]
该表包含数万行。
我经常收到以下错误:
将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。
有什么想法吗?
答案 0 :(得分:2)
ContT
John提供了一些很好的信息,但我想我会为你扩展一点。
答案 1 :(得分:0)
我怀疑你可能在想这个
Declare @String nvarchar(25) = '20161121'
Select cast(@String as date)
返回
2016-11-21
答案 2 :(得分:0)
SQL中的简单日期转换方法:
DECLARE @datevar VARCHAR(8)
SET @datevar = '20161122'
SELECT REPLACE(CONVERT(DATE, @datevar, 112),'-','')
答案 3 :(得分:0)
正如您所说,您的日期格式为" yyyymmdd "。您在查询中使用112代码进行日期转换,这也是正确的,因为它接受日期" yyymmdd "格式。所以查询没有问题。
但是如果转换方法中的输入数据错误则会产生问题。例如
如果我在查询下运行。它工作正常,因为dd = 11和mm = 22,格式正确。
for connectedPeer in self.connectedPeers {
let sendingProgress = self.session.sendResourceAtURL(newPhotoUrl!, withName: "Image1", toPeer: connectedPeer, withCompletionHandler: { (error) in
if error != nil {
print("sending failed \(error!.localizedDescription) - \(connectedPeer.displayName)")
}
})
sendingProgress.addObserver(self, forKeyPath: "fractionCompleted", options: .New, context: nil)
}
但如果我的查询是这样的话。在这里,我把22放在mm。这会产生一个问题,因为mm的最大值是12.
select convert(varchar(10), cast(ltrim(rtrim(replace('20161122', '"', ''))) as datetime), 112) [mydate]
所以查询没有问题。该问题是由于该表中的错误数据而生成的。
希望这会对你有所帮助:)。