MySQL UNION 正在改变数据格式

标签 mysql union

我对这个有点困惑。我有很多不同公司的类似表,试图将它们合并以获得组合数据。但是,UNION 更改了我的某一列的数据格式,这破坏了使用该列的 PHP 代码。

每个表中的列是:

branch tinyint(2) unsigned zerofill

以下是仅从第一家公司中进行选择的情况(这只是一个示例,我所做的实际选择要复杂得多):

SELECT DISTINCT branch FROM company1
+--------+
| branch |
+--------+
|     01 |
|     02 |
|     03 |
|     04 |
|     40 |
|     90 |
+--------+

第二家公司:

SELECT DISTINCT branch FROM company2
+--------+
| branch |
+--------+
|     01 |
|     02 |
|     03 |
|     04 |
|     05 |
|     40 |
|     90 |
+--------+

最后是 UNION:

SELECT DISTINCT branch FROM company1 UNION SELECT DISTINCT branch FROM company2 

+--------+
| branch |
+--------+
|      1 |
|      2 |
|      3 |
|      4 |
|     40 |
|     90 |
|      5 |
+--------+

您可以看到我丢失了 UNION 上的前导 0。有什么建议吗?

最佳答案

来自MySQL documentation :

The ZEROFILL attribute is ignored when a column is involved in expressions or UNION queries.

在查询中显式使用 LPAD:

SELECT LPAD(branch, 2, '0') AS branch
FROM (
    SELECT DISTINCT branch FROM company1 
    UNION 
    SELECT DISTINCT branch FROM company2
) AS x

关于MySQL UNION 正在改变数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915811/

相关文章:

mysql - 如何仅将 MySQL 权限授予特定行

mysql - 使用子查询生成新列

mysql - SQL联盟更新

MySQL:合并联合和前 3 名潜在客户数

MySQL 错误 1054 : Unknown Column 'hotels.postal_code' in 'on clause'

php - 空白/空搜索表单字段

python - 将字符串的十六进制字符转换为python中的普通字符

php - Varchar值以数值分类

SQLite3,从两个表中选择一个具有优先级?

mysql - 如何替换 View 查询中的 UNION?