4

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

源数据如下所示:


    |    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 语法旨在null根据需要保留 s 。

另外,当我在这里时,如果您碰巧知道SELECTMySQL 的当前时间戳,那也会很有帮助。

4

1 回答 1

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
于 2013-03-28T22:47:19.580 回答