【问题标题】:SQLite does not cast to integerSQLite 不会转换为整数
【发布时间】:2017-06-19 06:57:02
【问题描述】:

我创建了以下选择并计算“缺失”值

 select strftime('%d.%m. %H:%M', O_LROU_DEPARTDATE) || ' - ' || O_LROU_IDENT as Ident,  
        O_LROU_CSLCNTPICKED as 'done',
        CAST((O_LROU_CSLCNT - O_LROU_CSLCNTPICKED) as integer) as 'missing'

   from RAW_OM36     

 where (O_LROU_CSLCNT - O_LROU_CSLCNTPICKED) > 0

但缺失的值仍然是文本而不是整数。 Here a picture! What's going wrong?

【问题讨论】:

  • 将列 typeof(CAST(O_LROU_CSLCNT - O_LROU_CSLCNTPICKED as integer)) 添加到 SELECT 子句。它是否也显示“文本”?
  • 这是一个整数值!太疯狂了。但是 C# 中 SQLiteDataAdapter 的 DataTable 也确实使用字符串而不是该列的整数
  • 这似乎是DataTable的问题。
  • 不一定,因为正如您在屏幕截图中看到的,SQLLiteStudio 版本 3.1.1。有同样的问题
  • 可能它也使用了DataTable?无论如何,数据库返回一个整数值;显然,SQLiteDataAdapter 不能正确处理类型。

标签: string sqlite casting integer type-conversion


【解决方案1】:

我也遇到了同样的问题。

从您的图片中不清楚选择了多少条记录。我的驱动程序从第一条记录中确定数据类型。如果第一条记录中的值为空,则驱动程序将该列解释为字符串 (32767)。如果第一条记录是有效整数,则该列被解释为整数。

一个可能的解决方案是改变 CAST((O_LROU_CSLCNT - O_LROU_CSLCNTPICKED) 作为整数) 到 IFNULL(O_LROU_CSLCNT - O_LROU_CSLCNTPICKED), 0) 接受您的应用程序可能无法接受将空值更改为零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多