标签: null

在 PostgreSQL 的表中插入一个 'NULL' 字符串

我想知道是否可以在具有NOT NULL约束的列中插入“空”字符串。

我正在使用 PostgreSQL,尽管这可能也适用于其他数据库管理系统。

查询如下所示

INSERT INTO originators(originator, id, regexp)
VALUES ('null', 1, -1);
Run Code Online (Sandbox Code Playgroud)

这是表设计:

CREATE TABLE originators
(
      originator    varchar(30)    NOT NULL
    , id            int            NOT NULL
    , regexp        int            NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

这里原始列有一个NOT NULL约束,所以表中不应该有 NULL 值。

但是,当我查询表时,我看到的是:

?????????????????????????????????
? 创始者?ID ?正则表达式?
?????????????????????????????????
? 空值 ?1 ? -1 ?
?????????????????????????????????

这怎么可能?

postgresql null

0
推荐指数
1
解决办法
3343
查看次数

可以具有三种状态的列的数据类型:是、否、未知

我有一个应用程序,用户可以在其中做出决定:

  • 是的
  • 未知

我开始使用可以为空的布尔列。

但是事情变得相当复杂,因为我的框架 (django) 没有提供用于开箱即用的搜索表单编码的输入字段。

在搜索表单中,我需要四种状态:

  • 是的
  • 未知
  • 显示全部(在搜索中忽略此列)

相关问题:https : //stackoverflow.com/questions/38307866/search-form-for-nullbooleanfield

一个旧的经验法则再次出现在我的脑海中:

避免可为空的数据库列。

我想将数据类型从可为空的布尔字段更改为不同的类型。

可以具有三种状态的列的哪种数据类型:是、不是、未知?

我使用 Postgres 9,但 AFAIK 这对于这个问题应该无关紧要。

postgresql null datatypes

0
推荐指数
1
解决办法
1236
查看次数

MySQL 插入 NULL 插入 0

我正在使用 MySQL 和 PhpMyAdmin,我有一个名为的表items- 结构如下;

+------+---------+------+---------+
| name | type    | Null | Default |
+------+---------+------+---------+
| id   | int(11) | No   | None    |
+------+---------+------+---------+
| year | int(4)  | Yes  | Null    |
+------+---------+------+---------+
Run Code Online (Sandbox Code Playgroud)

在 PhpMyAdmin 中,我运行以下查询;

UPDATE `item` SET `item_publication_year` = '' WHERE `item_id` = '5'
Run Code Online (Sandbox Code Playgroud)

这将成功执行。

然后我运行这个查询;

SELECT * FROM `item` WHERE `item_id` = '5'
Run Code Online (Sandbox Code Playgroud)

这将成功执行并产生以下结果;

+-----+------+
| id  | year |
+-----+------+
| 5   | 0    |
+-----+------+
Run Code Online (Sandbox Code Playgroud)

为什么是这个year领域0——不应该是 …

mysql null select update

0
推荐指数
1
解决办法
1141
查看次数

与 NULL 值连接(不应替换 NULL)

经过一段时间寻找答案后,我收到了很多问题,说要使用coalesceconcat()等,但我需要的是:

桌子:

create table nulos ( nome varchar(max))
alter table nulos add cidade varchar(max)
Run Code Online (Sandbox Code Playgroud)

价值观:

insert into nulos values ( 'rafael','são paulo'),('juliana',null)
Run Code Online (Sandbox Code Playgroud)

我需要将这个表中的值连接到一个插入中,如下所示:

 select 'insert into nulos (nome,cidade) values ('+nome+','+cidade+')'
from nulos
Run Code Online (Sandbox Code Playgroud)

和选择的结果:

insert into nulos (nome,cidade) values (rafael,são paulo)
NULL
Run Code Online (Sandbox Code Playgroud)

如何在此串联中使用 NULL 值?每个答案都说用''or替换空值'_',但我需要的是:

insert into nulos (nome,cidade) values (rafael,são paulo)

insert into nulos (nome,cidade) values (Juliana,NULL)
Run Code Online (Sandbox Code Playgroud)

SET CONCAT_NULL_YIELDS_NULL on 不是一个选项,因为它只是删除 NULL 值,我需要插入它。

null sql-server sql-server-2008-r2 string-manipulation

0
推荐指数
1
解决办法
4528
查看次数

SQL 左连接返回空列

我想LEFT JOIN在两个表上做一个,其中一个表有一个日期时间列,另一个表有一个日期列。当我在 SQL Server 中工作时,我曾经CONVERT将日期时间更改为日期。然后我写了 join 语句:

SELECT CONVERT(date,db1.dbo.table1.datecolumn), db2.dbo.table2.datecolumn
FROM db1.dbo.table1
LEFT JOIN db2.dbo.table2 
    ON db1.dbo.table1.datecolumn = db2.dbo.table2.datecolumn
Run Code Online (Sandbox Code Playgroud)

查询返回 table1 中的日期列,但 table2 中的列仅填充为 NULL 值。我不确定我做错了什么。我尝试CASTCONVERT,而不是,但没有运气。转换有什么事情发生吗?任何帮助表示赞赏。

null join sql-server

0
推荐指数
1
解决办法
1万
查看次数

可能为 NULL 单元格的两列的差异

我需要按两列的差异对表格进行排序

SELECT (first - second) AS dif
    FROM table1
ORDER BY dif DESC
Run Code Online (Sandbox Code Playgroud)

但两列可以NULL。在这种情况下,它返回错误:

BIGINT UNSIGNED value is out of range
Run Code Online (Sandbox Code Playgroud)

这个错误的解决方案是使用IFNULL(col,0),但问题是,我需要difNULL,如果任一列是NULL

mysql null query order-by select

0
推荐指数
1
解决办法
669
查看次数

IF 语句的问题

我遇到了这个存储过程的问题。当用户选择“是”时,它应该按照它在“是”的 if 语句中所说的那样做,但它什么也不做,也不向数据库中插入任何内容。它适用于“否”条件。你能告诉我什么不起作用吗?

ALTER PROCEDURE [dbo].[sp_ff_Insert_ProjectApproved]
(

        @project_no varchar(6)
       ,@sequence_no int
       ,@grant_programme varchar(2)
       ,@jobs_approved int
       ,@grant_amount int
       ,@Committee varchar(4)
       ,@Meeting_no int
       ,@Minute_Item int
       ,@jobs_maintained int
       ,@approval_date date
       ,@approval_by int
       ,@comments varchar(1600)
       ,@created_by int
       ,@created_date datetime
       ,@updated_by int
       ,@updated_date datetime
       ,@approval varchar(5)
       ,@ratify varchar(3)




       --,@research_type varchar(1)='T'
)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from


DECLARE @ReturnValue int,
        @post_approval_status varchar(3),
        @approval_status varchar(3),
        @current_status varchar(3)  

set @current_status = ( SELECT approval_status from approval_master_tbl
         WHERE project_no = @project_no …
Run Code Online (Sandbox Code Playgroud)

null sql-server t-sql

0
推荐指数
1
解决办法
52
查看次数

总计列 - 如果为零或 NULL 则为空白

报告当前计算“总计”列,如下所示:

,CASE WHEN ISNULL(CLM_BREAKFAST_TYPEA.MealsA, 0) +
           ISNULL(CLM_BREAKFAST_TYPEB.MealsB, 0) = 0                 
      THEN ''
      ELSE CONVERT(VARCHAR(15), 
           ISNULL(CLM_BREAKFAST_TYPEA.MealsA, 0) +
           ISNULL(CLM_BREAKFAST_TYPEB.MealsB, 0)) 
      END AS 'MealsTotal'
Run Code Online (Sandbox Code Playgroud)

当总数等于零而不是 NULL 或“0”时,如何获得空白单元格,并避免进行两次计算?

null sql-server t-sql

-1
推荐指数
1
解决办法
1465
查看次数

将两个表与包含 null 的键组合在一起

我有两个要加入的表

|id |profit|
| 1 | 1234 |
| 2 | 1345 |
| 4 | 1454 |
| 5 | 1254 |
Run Code Online (Sandbox Code Playgroud)

和另一张桌子

| id | x loss | y loss |
| 2  | 34312  | 4354   |
| 3  | 35614  | 4365   |
| 4  | 36615  | 4321   |
Run Code Online (Sandbox Code Playgroud)

并结合两者,这将是我想要的结果

| id | profit | x loss | y loss |
| 1  | 1234   | Null   | Null   |
| 2  | 1345   | …
Run Code Online (Sandbox Code Playgroud)

null join sql-server

-1
推荐指数
1
解决办法
378
查看次数

用值替换 NULL

这是我的临时表:

CREATE TABLE #test123(
    c1 float,
    c2 float,
    c3 float,
    c4 float,
    c5 float
);

INSERT #test123(c1,c2,c3,c4,c5)
VALUES (2,3,NULL,1,2),
       (2,NULL,NULL,1,2),
       (2,3,NULL,NULL,2),
       (NULL,3,NULL,1,NULL),
       (2,3,NULL,1,2);
Run Code Online (Sandbox Code Playgroud)

当我运行以下查询来替换第一列中的所有 NULL 时

INSERT INTO #test123 (c1) VALUES (ISNULL(c1,0));
Run Code Online (Sandbox Code Playgroud)

或者

INSERT INTO #test123 (c1) SELECT CASE WHEN c1 IS NULL THEN 0  END AS c1;
Run Code Online (Sandbox Code Playgroud)

我两次都收到错误“无效的列名 'c1'”。

的语法(来源INSERT INTO是:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...); 
Run Code Online (Sandbox Code Playgroud)

null sql-server insert replace isnull

-1
推荐指数
1
解决办法
53
查看次数

在 WHERE 子句的 CASE 表达式中使用 IS NULL

我有一个WHERE要在其中使用CASE表达式的子句。但是,我的CASE表达式需要检查字段是否为IS NULL.

如果@UserRole变量值 = 'Analyst',则SupervisorApprovedBy列值必须为NULL. 否则,我是说返回所有数据,即SupervisorApprovedBy = SupervisorApprovedBy.

我需要更改以下内容吗?

WHERE SupervisorApprovedBy = 
CASE 
    WHEN @UserRole = 'Analyst' THEN NULL
    ELSE SupervisorApprovedBy
END
Run Code Online (Sandbox Code Playgroud)

我不能使用=for NULL。经测试无效。

我希望返回所有行,包括那些 where SupervisorApprovedBy IS NOT NULL

null sql-server t-sql case

-3
推荐指数
2
解决办法
7万
查看次数