我对这个有点困惑。我有很多不同公司的类似表,试图将它们合并以获得组合数据。但是,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。有什么建议吗?
最佳答案
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/