【问题标题】:C# ODBC SELECT query with mm.dd.yyyy format date使用 mm.dd.yyyy 格式日期的 C# ODBC SELECT 查询
【发布时间】:2018-01-09 07:27:55
【问题描述】:

我在 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

|日期1 |

|----------|

|02.02.2018|

|2018 年 2 月 2 日|

|2018 年 2 月 2 日|

以上示例数据在date1 列上具有不同的格式。

【问题讨论】:

  • 你试过了,结果如何?
  • @ChetanRanpariya 它只是抛出异常或不匹配条件。
  • 这些实际上都不是DATEs。它们都是某种形式的字符串(CHARVARCHAR 等)。您需要为 CSV 数据使用更强大的 ODBC 驱动程序 — 即可以将 CONVERTSTRINGDATE 的驱动程序 — 或者将该 CSV 带入真正的 DBMS(并为该 DBMS 使用 ODBC 驱动程序)。

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


【解决方案1】:

看看这个http://www.sqlusa.com/bestpractices/datetimeconversion/

SELECT convert(datetime, '02-02-2018')
SELECT convert(datetime, '02/02/2018')
SELECT convert(datetime, '02.02.2018')

【讨论】:

  • 它会抛出异常,我认为CONVERT 不会在这里工作
  • 感谢您的回复。但我在CSV data 上使用ODBC SELECT query。不在SQL SERVER
【解决方案2】:

由于您的日期“字段”不是日期而是字符串,因此请与文本进行比较:

string query = @"SELECT * FROM data.csv WHERE date1 NOT IN ('02-02-2018','02.02.2018','02/02/2018')";

【讨论】:

  • 我已将该字段设置为来自 ODBC 连接的Date。仍然需要检查为string
  • 但是数据类型Date的字段不携带格式,它只是一个值。即使转换为文本,也不能使用三种不同的格式 - 只能使用一种格式。
  • 如果它只包含一个列的一种格式和另一列的另一种格式,但我不知道哪一列有哪种格式。那我该如何对他们使用查询呢?
  • 从这里看不到...但是您检查了我的查询吗?至于您报告的示例数据,它应该可以工作。
【解决方案3】:

我认为 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 来加载它们。

希望你能明白。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多