我想将unsigned int(0到65535)存储到smallint中。PostgreSQL函数在smallint中recort uint
我期望是这样的:
CAST(($1 - 32768) AS smallint)
我的表有一栏
version smallint NOT NULL
我该怎么做才能INSERT INTO mytable SET(1);
,它会记录-32767 ,当我SELECT version from myTable;
将返回1?
我想将unsigned int(0到65535)存储到smallint中。PostgreSQL函数在smallint中recort uint
我期望是这样的:
CAST(($1 - 32768) AS smallint)
我的表有一栏
version smallint NOT NULL
我该怎么做才能INSERT INTO mytable SET(1);
,它会记录-32767 ,当我SELECT version from myTable;
将返回1?
您可以在表格顶部创建一个视图,该视图选择(version + 32768) as version
(该视图的该列将是int类型,您也可以添加一个显式强制转换)。那么你应该查询这个视图而不是原始表来获取0-65535之间的值。
例子:现在
CREATE VIEW myTableView AS SELECT col1, col2, (version::int + 32768) as version FROM myTable;
,SELECT version FROM myTableView
将0到65535
对于插入之间的返回值,你可以创建一个INSTEAD OF INSERT
触发myTableView,这将插入(版本 - 32768):: SMALLINT进入myTable。这应该很容易,但我现在无法测试,因此我不提供示例。
嘿非常好主意!我会尽快尝试。 谢谢Hedayat –
SMALLINT应该能够采取值-32768至+32767每PostgreSQL文档..究竟你的表是什么样的,什么是你想实现什么? – ryekayo
我想在查询中提供uint并在smallint中存储uint –
为什么不使用'integer'并创建一个限制值的检查约束?这取决于表中其余的列,但我非常怀疑你会发现存储容量和性能有很大差异。 –