【发布时间】:2016-07-17 16:51:44
【问题描述】:
我正在尝试以四个为一组编写一个信用卡号,最多为十六位。我正在使用 CONCAT 和 SUBSTRING 来执行此操作。
注意:我没有收到错误,它运行但输出不是我想要的。
我想要的是这个:xxxx-xxxx-xxxx-xxxx 我得到了什么:2147-4836-47-(不仅在一个位置,而且在所有四个条目中)
这是因为我试图在下标语句中分解一个 int 变量吗?您可以在 substring() 中使用 int 字符吗? BIGINT 呢?
不管我为什么将其更改为 varchar,并使用 CONCAT 和 SUBSCRIPT 运行它。一切似乎都很好,但欢迎进一步输入。 :)
创建的表:
CREATE TABLE credit_cards
(
credit_card_ID int(10) UNIQUE,
credit_card_num int(20) NOT NULL,
exp_date DATE NOT NULL,
card_fname varchar(35) NOT NULL,
card_lname varchar(35) NOT NULL,
security_code int(5) NOT NULL,
bill_street varchar(50) NOT NULL,
bill_city varchar(25) NOT NULL,
bill_state varchar(2),
bill_zip int(10) NOT NULL,
PRIMARY KEY (credit_card_ID)
);
插入数据:
INSERT INTO credit_cards VALUES
(1, 0025184796520000, '2016-08-13', 'Sarah', 'Jones', 3351, '2490 Paseo Verde parkway, suite 150', 'San Diego','CA',92124),
(2, 7896541232548526, '2017-09-21', 'Desmond', 'Lowell', 1204, '3201 Kelsey Street, suite 109', 'San Diego','CA',92174),
(3, 1234567890123456, '2018-02-11', 'Mark', 'Jefferson', 1591, '876 Silverado Street, suite 304', 'Henderson','NV',89162),
(4, 4001330852539605, '2017-01-10', 'Jaime', 'Evans', 8879, '924 Shady Pines Circle, suite 120', 'Summerlin','NV',89074);
选择数据
SELECT credit_card_ID as 'Card ID',
CONCAT(
SUBSTRING(credit_card_num, 1,4), '-',
SUBSTRING(credit_card_num, 5,4), '-',
SUBSTRING(credit_card_num, 9,4), '-',
SUBSTRING(credit_card_num, 13,4)) as 'Card Number',
security_code as 'Security Code',
DATE_FORMAT(exp_date, '%m-%d-%Y') as 'Expiration Date',
CONCAT(card_fname, ' ', card_lname) as 'Customer Name',
CONCAT(bill_street, ', ', bill_city, ', ', bill_state, ' ', bill_zip) as 'Billing Address'
FROM credit_cards
ORDER BY exp_date ASC;
【问题讨论】:
-
如果您关心前导零,那么您就没有数字。您应该使用字符串。您可以使用
lpad()附加它们,这应该可以修复您的代码。 -
感谢您的建议。 :) 我从未听说过 lpad(),但我会彻底研究它。我只是将其更改为 VARCHAR,并发现了其他一些我认为让它变得不稳定的东西。它现在与 CONCAT 和 SUBSCRIPT 一起工作得很好,但我对 lpad 很好奇。我一定会检查出来的。
-
另外你必须使用
BIGINT。INT不会占用 20 位数字。见:MySql Docs -
哦!这真是太好了!非常感谢! :)
-
注意:
LPAD函数是一个字符串函数。它对字符串进行操作。与整数参数一起使用时,参数会自动转换为 VARCHAR,然后 LPAD 对返回的字符串进行操作。也就是说,有一个从整数到 varchar 的隐式转换/转换。
标签: mysql sql int substring concat