带有mm.dd.yyyy格式日期的C#ODBC SELECT查询

时间:2018-01-09 07:27:55

标签: c# sql ms-access odbc date-format

我在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列上具有不同的格式。

3 个答案:

答案 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')

enter image description here

答案 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中转换后的文件加载它们。

希望你明白这一点。