我在CSV数据上使用c# ODBC query
,其中包含不同格式的日期。
就像某些专栏有MM.DD.YYYY
格式一样,而很少有专栏有MM-DD-YYYY
格式。
如何编写SELECT statement
来查询这些列?
我试过SELECT * FROM data.csv WHERE date1 <> #02-02-2018#
其中存储的数据类似于02.02.2018
。
string query = "SELECT * FROM data.csv WHERE date1 <> #02-02-2018#";
OdbcDataAdapter da = new OdbcDataAdapter(query, conn);
da.Fill(dataSet, table.Name);
我期望的是无论CSV日期格式如何,它都会以给定的值执行where
。
| date1 |
| ---------- |
| 2018年2月2日|
| 2018年2月2日|
| 2018年2月2日|
以上示例数据在date1
列上具有不同的格式。
答案 0 :(得分:0)
查看http://www.sqlusa.com/bestpractices/datetimeconversion/
SELECT convert(datetime, '02-02-2018')
SELECT convert(datetime, '02/02/2018')
SELECT convert(datetime, '02.02.2018')
答案 1 :(得分:0)
作为您的日期&#34;字段&#34;不是日期而是字符串,与文字比较:
string query = @"SELECT * FROM data.csv WHERE date1 NOT IN ('02-02-2018','02.02.2018','02/02/2018')";
答案 2 :(得分:0)
我不认为ODBC可以处理多种日期时间格式。要克服这种情况,您必须将date1
列告知schema.ini中的文本列(请参阅MSDN)。然后,您将查询包括所有可能的日期格式值作为文本值
string query = "SELECT * FROM data.csv WHERE date1 <> '02.02.2018' OR date1 <> '02-02-2018' OR date1 <> '02/02/2018'";
这不是解决此问题的优雅方法。但它确实有效。
第二个想法是,如果您不想泄露日期类型以外的date1
列数据类型,则应该清理CSV文件,将所有date1
值转换为单个日期格式,然后使用ODBC中转换后的文件加载它们。
希望你明白这一点。