【问题标题】:Finding numbers in a given range MySQL SQL查找给定范围内的数字 MySQL SQL
【发布时间】:2014-04-27 20:46:36
【问题描述】:

我的表的 DDL 架构如下所示...

CREATE TABLE StockCodes (
    stockCode SMALLINT AUTO_INCREMENT,
    stockName VARCHAR(100),
    stockStart SMALLINT,
    stockFinish SMALLINT,
    stockCurrentNumber SMALLINT
); 

如何实现 stockCurrentNumber,这样我就可以得到一个记录列表,例如... stockCurrentNumber 001、002、003、004、005。

另外,我如何捆绑 stockCode 和 stockCurrentNumber 以形成复合主键。

另外,删除库存时如何删除单个 stockCurrentNumber?

非常感谢任何帮助

【问题讨论】:

  • StockCode和StockCurrentNumber有什么区别?
  • @GordonLinoff stockCode 和 stockCurrentNumber 应该捆绑在一起形成一个主复合键。
  • 您能否展示表中的数据示例、到目前为止您尝试运行的查询以及此查询的结果与您想要的结果有何不同?目前,尚不清楚您在寻找什么。

标签: mysql sql ddl create-table


【解决方案1】:

在列上用ZEROFILL 定义。

stockCurrentNumber smallint(3) unsigned zerofill

这会导致列中的所有插入都以0 填充。

示例:
当您插入1 时,它将被存储为001。您可以与field = 1 等实际值进行比较。

当它与其他值连接时,填充的零不会丢失。

示例:
如果stockCode 是6 而stockCurrentNumber 是9 那么

concat( stockCode, stockCurrentNumber )

将产生6009。

参考: MySQL: SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

【讨论】:

  • ZEROFILL 可能是答案,但说在存储时用零填充该值并不准确。 ZEROFILL 属性对存储的内容没有任何影响;它只影响检索到的值。
  • 也就是说,当调用length( zero_fill_field ) 或char_length( zero_fill_field ) 时应该返回什么?
  • LENGTH() 和CHAR_LENGTH() 函数分别以字节和字符返回字符串(参数)的长度。 MySQL 将从zero_fill_field 列中检索值,将其转换为字符串,然后LENGTH() 函数将返回字符串中的字节数。 SMALLINT UNSIGNED 将使用字节存储,完全独立于存储的值和 ZEROFILL 属性(除了 NULL 指示符的正常行开销等)
  • 我找不到任何关于 zerofill 数据如何存储但检索的文档。有的话可以分享一下吗?
  • 定义为TINYINT(10) UNSIGNED ZEROFILL 的列仍然只为每行使用一个字节的存储空间,但返回一个长度为10 的字符串。参考:https://dev.mysql.com/doc/refman/5.5/en/numeric-type-attributes.html 和https://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html
【解决方案2】:

我不确定我是否理解你:

这是用复合主键创建表的方法,注意stockCurrentNumber 是varchar 不会丢失左边的0

CREATE TABLE StockCodes (
stockCode SMALLINT AUTO_INCREMENT,
stockName VARCHAR(100),
stockStart SMALLINT,
stockFinish SMALLINT,
stockCurrentNumber varchar(255),
PRIMARY KEY(stockCode, stockCurrentNumber)
); 

然后删除:

DELETE FROM StockCodes WHERE stockCode='x' AND stockCurrentNumber='y';

【讨论】:

  • 是的,例如 stockStart = 1 & stockFinish = 10,我如何获得一个带有 stockCurrentNumber 的表,例如 1,2,3,4,5,6,7,8,9,10
猜你喜欢
  • 2020-10-03
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多