postgresql 9.3 中是否有任何技术可以使其开始返回 1 和 0 而不是布尔类型的“t”和“f”

2023-12-05

实际上,我正在将我的 ms sql 服务器迁移到 postgresql 9.3,并且我们使用 int 数据类型来存储布尔值的 1 和 0,但在 postgresql9.3 中这是不可能的。当我对 postgresql 的数据类型进行一些研究时,我得到了什么:

In Postgresql:-
For Integer type datatype:-

insert into ask(aint) values(1)         working
insert into ask(aint) values('1')       working

insert into ask(aint) values(true)      not working

select * from ask where aint=1;     working
select * from ask where aint='1';   working
select * from ask where aint=true;  working


*For smallint type datatype:-

insert into ask(asmall) values(1);      working
insert into ask(asmall) values('1');    working
insert into ask(asmall) values(true);   working

select * from ask where asmall = 1      working
select * from ask where asmall = '1'    working
select * from ask where asmall = true   not working

所以如果我想使用smallint,那么我遇到的问题是,我无法比较任何布尔字段,如果我使用整数,那么我无法插入任何布尔值,即使我可以比较布尔字段。和

我不能使用布尔数据类型,因为它返回“t”表示 true,“f”表示 false 所以我想要的是?

  1. 有什么方法可以比较smallint和boolean吗?
  2. 或者有什么方法可以在整数类型数据类型中插入布尔值。
  3. 或者我们可以做一些事情,让布尔类型开始返回 1 表示 true,0 表示 false。

那么有人可以帮助我吗?很紧急!谢谢


默认情况下,没有这样的转换 - 隐式转换默认仅用于来自相似组的数据类型(例如integer and bigint).

幸运的是,如果确实需要,您始终可以添加新的隐式转换。

首先,我们将创建一个新函数来转换smallint to boolean。为此,我们将使用现有的 C 函数bool_int4.

CREATE OR REPLACE FUNCTION int2(boolean)
  RETURNS smallint AS
'bool_int4'
  LANGUAGE internal IMMUTABLE STRICT
  COST 1;

现在我们可以创建从 boolean 到smallint 的新隐式转换:

CREATE CAST (boolean AS smallint) WITH FUNCTION int2(boolean) as implicit;

最后,我们准备直接比较smallint和boolean:

select 1::smallint=true

PostgreSQL文档警告大家,如果不明智地使用隐式转换,可能会发生不好的事情:

将强制转换标记为隐式时保持保守是明智的。一个 过多的隐式转换路径会导致 PostgreSQL 选择 对命令的令人惊讶的解释,或者无法解决 命令根本没有,因为有多种可能的解释。 A 好的经验法则是使强制转换只能隐式调用 同一类型中类型之间的信息保留转换 一般类型类别。

您可以从以下位置获取指定类型的强制转换列表pg_catalog,从表pg_cast:

select 
  castsource::regtype,
  casttarget::regtype,
  castcontext
from 
  pg_catalog.pg_cast
where
  castsource::regtype in ('boolean','smallint','integer') and
  casttarget::regtype in ('boolean','smallint','integer')
order by
  castsource::regtype,
  casttarget::regtype;

这将返回(9.1.9):

castsource;casttarget;castcontext;
boolean;integer;e
smallint;integer;i
integer;boolean;e
integer;smallint;a
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

postgresql 9.3 中是否有任何技术可以使其开始返回 1 和 0 而不是布尔类型的“t”和“f” 的相关文章

  • 在 Mac 中运行 Postgresql:数据库“postgres”不存在 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我按照这些说明让 postgresql 在 mac 上运行 请注意 我使用 Homebrew 进行安装 并且当前可通过brew安装的版本是 9 2 1
  • 如何在postgresql中查找具有特定列的表

    我正在使用 PostgreSQL 9 1 我有一个表的列名 是否可以找到具有此列的表 如果是这样 怎么办 你也可以做 select table name from information schema columns where colum
  • 如果未找到值,则使用默认值填充行 PostgresQL

    我想返回过去 7 天的 user activity 但对于那些空的日子我想添加 0 作为值 假设我有这张桌子 actions id date 67 123 2019 07 7 90 123 2019 07 9 100 123 2019 07
  • 通过 JDBC 将“daterange”字段值插入 PostgreSQL 表

    我在 PostgreSQL 9 3 有一个表日期范围 http www postgresql org docs 9 3 static rangetypes html字段类型 我可以像使用 JDBC 的字符串一样选择此字段 但无法将其插入表中
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • Postgres jsonb数组:查询非空交集

    假设我有一个名为的 JSONB 列value在表中t 这些 JSON 的内部是tags字段是字符串列表 我想对这些标记的 JSON blob 进行查询 foo or bar 所以假设表数据如下所示 value tags other tags
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 用户登录时的 Postgresql 触发器

    我正在尝试找出一种方法来了解用户何时登录 Postgres 数据库 有没有办法定义用户登录数据库时触发的触发器 或者是否有一个表或系统视图在任何人登录数据库时都会更新 登录钩子 https github com splendiddata l
  • 如何 md5 所有列(无论类型如何)

    我想创建一个 sql 查询 或 plpgsql 它将 md5 所有给定的行 无论类型如何 但是 在下面 如果 1 为空 则哈希为空 UPDATE thetable SET hash md5 accountid accounttype cre
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 检查 postgres 复制状态

    有人可以建议检查 postgresql 复制状态的步骤以及如何确定复制是否未正确进行吗 我们在 pgsql9 0 和 pgsql9 4 中使用流复制 我通常使用以下 SQL 查询来检查 Postgres v11 的状态 关于主人 selec
  • 在 postgresql 中查找和汇总具有重叠记录的日期范围

    我有一个大型数据集 我想对记录具有重叠时间的计数进行求和 例如 给定数据 id 1 name A start 2018 12 10 00 00 00 end 2018 12 20 00 00 00 count 34 id 2 name B
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 由于键更改而尝试插入时外键约束失败

    我有一个 Content 对象 它引用多对多关系中的一组 Tag 对象 作为持久化新内容对象的一部分 我在 PostgreSQL 中查看标签是否已存在 如果存在 则将对其的引用添加到内容对象并尝试保存内容对象 我遇到的问题是 当我这样做时
  • PostgreSQL-过滤日期范围

    我是一名 SQL 开发人员 大部分时间都花在 MSSQL 上 我正在寻找一种更好的方法来过滤 PostgreSQL 数据库中的 无时区时间戳 字段 我在用着 Where DateField gt 2010 01 01 and DateFie
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • Supabase 客户端权限被拒绝,模式为 public

    每当我尝试使用 supabase supabase js 查询数据库时 都会收到错误 error hint null details null code 42501 message permission denied for schema
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一

随机推荐

  • 如何在 PHP 中使用 cURL 发布到 Google 脚本并返回文本?

    我正在努力做最少的事情 只是为了让它发挥作用 这是我的谷歌脚本 function doPost e return ContentService createTextOutput JSON stringify e parameter 这是我的
  • 将 int 值编码为 IEEE-754 float (binary32)

    给定表示 IEEE 754 浮点数的 32 位 如何使用表示形式上的整数或位运算 而不是使用机器指令或编译器操作来转换 将该数字转换为整数 我有以下功能 但在某些情况下会失败 输入 int x 包含 IEEE 754 格式的 32 位单精度
  • Python - 手动浏览器登录后从 urllib2 恢复 Web 会话

    假设我浏览到一个需要登录才能访问内容的网站 也在 Intranet 上 我将填写必填字段 例如从浏览器本身登录所需的用户名 密码和任何验证码等 登录该网站后 可以从登录后第一页上的多个链接和选项卡中抓取很多好东西 现在 从现在开始 即从浏览
  • DocuSign - RestApi v2 - 使用 C# 下载文档

    我正在尝试使用以下代码通过 RestAPI v2 检索签名文 档 url baseURL accounts 3602fbe5 e11c 44de 9e04 a9fc9aa2aad6 envelopes envId documents com
  • C# 的 ExpectedCondition 方法 attributeContains

    我试图使用 attributeContains 方法 但在使用 C 时没有可用的方法 https seleniumhq github io selenium docs api java org openqa selenium support
  • 在 R 中使用多个三点省略号[重复]

    这个问题在这里已经有答案了 有没有一种方法可以将任意参数传递给函数内的多个命令 以下功能显然不起作用 但我希望它能解释我想要实现的目标 test function x rnorm 20 y rnorm 20 plot x y type p
  • 如何使用 RVM 将 Ruby 更改为版本 1.9.3(再次)?

    我曾经在 Ubuntu 上使用 Ruby 版本 1 9 3 并进行了更新 这可能会破坏我的 bash 配置文件 我需要帮助将其恢复 而不是使用版本 1 8 7 现在rails s使用 Ruby 1 8 7 打开服务器 由于我在应用程序中使用
  • Redis 中的 Azure 缓存/DataCache 样式区域

    我正在计划将 C ASP Net Web 应用程序迁移到 Azure 当前托管在单个专用服务器上 并且正在考虑缓存选项 目前 由于我们一次只运行一个应用程序实例 因此我们有一个 进程内 内存缓存来缓解 SQL DB 的一些相同请求 目前的过
  • 在 Outlook 中设置特定文本的格式

    我需要格式化从 Outlook 中的 Excel 获取的特定字符串值 一旦 Excel 提供了该值 宏就会将该值附加到电子邮件中 我尝试测试并将值设置为粗体 但消息的所有内容都变成粗体 如何设置值的格式 以便我可以根据自己的喜好使用字体类型
  • 删除评论 - React js

    实际上 我一直在尝试向我的评论框系统添加 删除评论 功能 这是我的代码 var Comment React createClass handleClick function e e preventDefault var commentId
  • 部署到 Program Files 目录

    我开发了一个 C 应用程序 我想将其部署到C Program Files Company Name Product文件夹 我没有看到目标计算机上创建的 公司名称 文件夹 我将文件从 已发布 目录复制到记忆棒 拇指驱动器 上 我将记忆棒带到
  • 未按预期收到段错误

    我正在学习如何在 C 中使用指针和结构 当然 我会尝试故意破坏我的代码以进一步了解该语言的工作原理 这是一些按我预期工作的测试代码 include
  • 如何防止按 Enter 键时文本从文本区域中删除?

    当我在粉红色文本框中写入新文本并按enter新文本将在该框中更新 但是 如果我只是单击粉色文本框内部并且不进行任何更改 然后按enter 然后站在那里的文本被删除 它不应该被删除 如果我不做任何更改 那么已经存在的文本应该继续存在 func
  • getElementsByClassName() 具有两个类

    是否可以获取所有具有类的元素a or b using getElementsByClassName 只有一次 我更喜欢普通的 JavaScript 你不能这样做getElementsByClassName 方法改为使用querySelect
  • API安全:如何通过域限制访问?

    我公开了一个简单的 API 需要确保只有授权用户才能访问它 我将提供一个 API 密钥来进行身份验证 但是 我还想将 API 密钥关联到某个域 这意味着 只有在从授权域使用它时它才应该起作用 如何检查 API 端是否是从授权域访问的 HTT
  • 用两个图例更改 ggplot 中的两个图例标题

    我的 ggplot 上有两个图例 有两个不同的图例标题 自动创建自ggplot 现在 我想更改这个图例标题 labs colour legend name 仅更改第二个图例标题 我怎样才能改变第一个呢 样本数据 dataset lt str
  • 用c写一个push和pop

    原始问题 我正在尝试用 C 语言为一个项目创建这个计算器 我让数学函数正常工作 但我不知道如何处理推入和弹出 有人可以帮助我开始吗 我知道java中的push和pop应该做什么 但我不确定如何在不使用节点或数组的情况下使用它们 我的包含和堆
  • Windows 上使用 python 自动 NTLM

    如何在 Windows 上使用 python 的自动 NTLM 身份验证 我希望能够从 Windows 访问 TFS REST API 而无需对密码进行硬编码 就像从 Web 浏览器 例如 firefox 的 network automat
  • 如何在 VB.NET 中编写事件处理程序?

    我正在尝试在 VB NET 中测试非常简单的事件处理 到目前为止我有 Public Delegate Sub TestEventDelegate Public Event TestEvent As TestEventDelegate Sub
  • postgresql 9.3 中是否有任何技术可以使其开始返回 1 和 0 而不是布尔类型的“t”和“f”

    实际上 我正在将我的 ms sql 服务器迁移到 postgresql 9 3 并且我们使用 int 数据类型来存储布尔值的 1 和 0 但在 postgresql9 3 中这是不可能的 当我对 postgresql 的数据类型进行一些研究