【问题标题】:In MySQL, how do I insert 1 when string value is 'true', 0 when false, while preserving nulls在MySQL中,如何在字符串值为'true'时插入1,在false时插入0,同时保留空值
【发布时间】:2013-03-19 13:49:22
【问题描述】:

我正在使用SELECTs 从纯文本数据库到查询更友好的数据库的INSERT 查询。为了避免与不必要的信息混淆,以下内容进行了很多简化,如果我为了清楚起见而简化得太多了,请告诉我,我会修改。

源数据如下:


    |    id (integer)    |    SomeCol (varchar)    |    BooleanCol (varchar)   |    
    ----------------------------------------------------------------------------
    |    1               |    'String Data'        |    'true'                 |
    |    2               |    'Other Data'         |    'false'                |

在我的INSERT查询之后,目标表需要如下所示:


    |    id (integer)    |    SomeCol (varchar)    |    BooleanCol (tinyint(1))   |    
    -------------------------------------------------------------------------------
    |    1               |    'String Data'        |    1                         |
    |    2               |    'Other Data'         |    0                         |

我正在寻找或多或少像这样工作的东西,借用一点 java 语法:


    INSERT INTO target(SomeCol, BooleanCol) 
    SELECT SomeCol, (BooleanCol IS NOT NULL ? (BooleanCol == 'true' ? 1 : 0) : null) 
    FROM source

请注意,作为我想要的示例提供的 java 语法旨在根据需要保留 nulls。

另外,当我在这里时,如果你碰巧知道SELECT 来自 MySQL 的当前时间戳,那也会很有帮助。

【问题讨论】:

    标签: mysql boolean insert-into string-conversion


    【解决方案1】:

    Mysql 有一个 IF 运算符,它类似于大多数语言中的 ?: 运算符。 IF(cond, val_if_true, val_if_false)

    INSERT INTO target(SomeCol, BooleanCol) 
    SELECT SomeCol, IF(BooleanCol IS NOT NULL , IF(BooleanCol = 'true' , 1 , 0) , null) 
    FROM source
    

    【讨论】:

    • 在 UPDATE 中也为我解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多