在MySQL中,如何在字符串值为"true"时插入1,在为false时插入0,同时保留空值

Sto*_*wke 4 mysql boolean string-conversion insert-into

我使用的是INSERT查询SELECT从纯文本数据库为多个查询友好的数据库秒.为了避免与不必要的信息混淆,以下内容进行了简化,如果我为了清晰起见而进行了简化,请告诉我,我会修改.

来源数据如下:


    |    id (integer)    |    SomeCol (varchar)    |    BooleanCol (varchar)   |    
    ----------------------------------------------------------------------------
    |    1               |    'String Data'        |    'true'                 |
    |    2               |    'Other Data'         |    'false'                |
Run Code Online (Sandbox Code Playgroud)

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


    |    id (integer)    |    SomeCol (varchar)    |    BooleanCol (tinyint(1))   |    
    -------------------------------------------------------------------------------
    |    1               |    'String Data'        |    1                         |
    |    2               |    'Other Data'         |    0                         |
Run Code Online (Sandbox Code Playgroud)

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


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

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

此外,虽然我在这里,如果你碰巧知道SELECTMySQL的当前时间戳如何也会有所帮助.

Vat*_*tev 14

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
Run Code Online (Sandbox Code Playgroud)