- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 C# 的 asp.net 3.5 中使用 SQL Bulkcopy 时遇到字符串到日期的转换问题
我读取了一个大型 CSV 文件(带 CSV reader )。读取的字符串之一应加载到 SQL Server 2008 日期列中。
如果文本文件包含例如字符串“2010-12-31”,SQL Bulkcopy 会将它毫无问题地加载到日期列中。
但是,如果字符串是“20101231”,我会得到一个错误:
数据源中String类型的给定值无法转换为指定目标列的日期类型
该文件包含 8000 万条记录,因此我无法创建数据表....
SqlBulkcopy Columnmappings等都可以。更改为 DateTime 也无济于事。
我试过了
SET DATEFORMAT ymd;
但这并没有帮助。
有什么办法告诉 SQL Server 接受这种格式吗?否则,我将在 CSV 阅读器中创建自定义修复程序,但我更喜欢 SQL 中的内容。
更新跟进这两个答案,我正在使用像这样的 SQL bulkcopy(正如在 Stackoverflow 上提出的另一个问题):
CSV 阅读器(请参阅上面关于代码项目的链接)返回字符串值(非强类型)。 CSVreader 实现了 System.Data.IDataReader,所以我可以这样做:
using (CsvReader reader = new CsvReader(path))
using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING))
{ bcp.DestinationTableName = "SomeTable";
// columnmappings
bcp.WriteToServer(reader); }
来自 iDataReader 的所有字段都是字符串,所以我不能使用 c# 方法,除非我在 CSVreader 中做了很多更改
因此,我的问题与如何在 C# 中修复它无关,我可以这样做,但我想阻止它。
这很奇怪,因为如果你在 sql 中做类似的事情
update set [somedatefield] = '20101231'
它也可以,只是不适用于 bulkcopy。
知道为什么吗?
感谢您的任何建议,普伦
最佳答案
旧问题,但想添加替代方法。
当从 IDataReader 流式传输时,我遇到了 SQLBulkLoader 不允许列的数据类型/文化规范的相同问题。
为了减少在本地构建数据行的速度开销,而不是在目标上进行解析,我使用的一个简单方法是临时将线程区域性设置为定义所用格式的区域性 - 在本例中为美国格式日期。
对于我的问题 - 输入中的 en-US 日期(在 Powershell 中):
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-US'
<call SQLBulkCopy>
对于您的问题,您可以这样做,但由于日期格式不是特定于文化的,因此创建一个默认文化对象(未经测试):
CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
newCulture.DateTimeFormat.ShortDatePattern = "yyyyMMDD;
Thread.CurrentThread.CurrentCulture = newCulture;
我发现允许数据库服务器在通过 SQLBulkCopy 接口(interface)后执行类型转换比在本地执行解析要快得多,尤其是在脚本语言中。
关于c# - SQL Bulkcopy YYYYMMDD问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750653/
您好,我是 Oracle 的新手,需要了解如何操作。 考虑我有一个文本文件,文件中的值为 '20180924''20180923' 我从 Pro*c 读取这些值,然后添加 29 天,因此该值现在从 2
这是查询: 选择 FACDTE.QTR ,FACDTE.WK ,FACDTE."DATE" ,FACDTE.DIV ,FACDTE.DST ,FACDTE.FAC ,FACDTE.DAYS ,COAL
在 R 中,我可以使用以下方法将日期解析为 Lubridate 格式: d format(d, "%Y%m%d") [1] "20130215" 关于c# - 在 R 中,如何以 yyyymmdd
我正在寻找一个正则表达式字符串,该字符串将验证格式为 yyyyMMdd(无分隔符)并适用于闰年的日期。到目前为止,我发现的最接近的东西只能验证自 2000 年以来的日期。 import java.ut
我有一个包含这种格式的日期的字符串 my $time = 'Fri Jan 8 14:24:27 2016'; 我想将其转换为 YYYYMMDD。我尝试了几个选项,例如: use POSIX qw(
我的索引有一个日期字段,格式为2020-01-04T05:00:06.870000Z。在ES查询响应中,我需要yyyyMMdd形式的日期,所以20200104。我尝试使用脚本查询并分别提取了日期,月份
我想像这样将控制台保存到.txt中 每次运行应用程序时。 以下是我根据当前时间保存控制台的方法: SimpleDateFormat dtf = new SimpleDateFormat("yyMMdd
如何根据系统日期将输出文本文件命名为 YYYYMMDD? sqlcmd -S DataBBB -i c:\scripts\followup.sql -o %DATE:~4,2%_%DATE:~
在 Javascript 中,我有如下所示的日期字符串: var dateStr = "Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)"
这个问题在这里已经有了答案: Regex date format validation on Java (12 个答案) 关闭 9 年前。 我正在从一个包含格式为 YYYYMMDD 的行的文件中读取
时间格式有点问题我想得到 YYYY-MM-DD 形式的输出,给定日期时间数据输入为 19901209,即 1990-12-09 . 我还想知道是否有任何方法可以获取其他格式的数据,例如 DD-MM-Y
我有一堆这种形式的日期字符串:- 30th November 2009 31st March 2010 30th September 2010 我希望他们是这样的:- YYYYMMDD 目前我正在这样
Python 和 Matlab 经常使用整数日期表示,如下所示: 733828.0733829.0733832.0733833.0733834.0733835.0733836.0733839.0733
我有一个要求,要求以 YYYYMMDD 格式传递日期。基于 swagger 文档,date filed 在 string 类型下定义。但是,它遵循 RFC 3339,第 5.6 节,文档(例如 201
我想要一个简单的 YYYYMMDD 格式,以便可以在有角度的前端显示它。 在这里,在对日期对象进行操作之后,我想将其分配回 TIMESTAMP结果对象中的列。 TIMESTAMP在数据库 (postg
我有一个包含代表日期的 8 位数字的字符串。例如: 20120515 我想将其与以这种方式创建的今天的日期进行比较: var currentDate = new Date(); 如何将“8 位日期字符
我正在尝试编写一个配置单元查询以从今天的分区中获取数据。这是我的查询: select * from testtable where data_dt ='date +%Y%m%d'; 我需要帮助将日期转
以下是我如何输入和使用日期作为宏变量: %let x = %SYSEVALF('01jan2012'd); %put &x; *see the date as sas sees it; %put %S
我知道我可以使用 SimpleDateFormat 获取 yyyyMMdd 格式的日期字符串,但它会带来一些成本,当我在我的机器上测试时,需要 2 秒进行 1000 万次操作 因为我可以缓存这个值并在
将用户输入日期格式从dd/mm/yyyy转换为yyyymmdd以方便日期检查。该代码将日期写入 .TXT 文件,但当我想要以 yyyymmdd 格式写入时,则以 dd/mm/yyyy 格式写入。到目前
我是一名优秀的程序员,十分优秀!