SQL BIT 列在输出时必须为空与 TRUE,在输入时为 NULL 与 1
SQL BIT column must be blank vs TRUE on output, NULL vs 1 on input
这就是我的 table 需要的样子:
MovieID Title YearReleased RatingID BW Subtitles
1 Quiet Man, The 1952 1
2 McLintock! 1963 3
3 Thin Man, The 1934 0 TRUE
4 Tampopo 1985 4 TRUE
这是我目前的代码:
CREATE TABLE MOVIE
(MOVIE_ID VARCHAR (2) PRIMARY KEY,
TITLE VARCHAR(20),
YEAR_RELEASED DATE,
RATING_ID VARCHAR(1),
BW BIT,
SUBTITLES BIT);
INSERT INTO MOVIE
VALUES
(1,'Quiet Man, The',1952,'1',NULL,NULL),
(2,'McLintock!',1963,'3',NULL,NULL),
(3,'Thin Man,The',1934,'0',(1),NULL),
(4,'Tampopo',1985,'4',NULL,(1));
我不明白如何插入空白点和真实值的数据。 :\ 我得到的是这样的:
MovieID Title YearReleased RatingID BW Subtitles
1 Quiet Man, The 1952 1 NULL NULL
2 McLintock! 1963 3 NULL NULL
3 Thin Man, The 1934 0 1 Null
4 Tampopo 1985 4 NULL 1
我的教授让我上网查找答案,因为它就在那里。 -_-
这是您要找的吗?
INSERT INTO MOVIE
VALUES
(1,'Quiet Man, The',1952,'1','',''),
(2,'McLintock!',1963,'3','',''),
(3,'Thin Man,The',1934,'0',(1),''),
(4,'Tampopo',1985,'4','',(1));
您还可以在创建时设置一个默认的空字符串 table
没问题,在您显示值的查询中使用 CASE
语句将 NULL
值替换为空字符串,将 0 替换为 False,将 1 替换为 true。像
SELECT MOVIE_ID,
Title,
YEAR_RELEASED,
RATING_ID,
CASE
WHEN BW IS NULL THEN ' '
WHEN BW = 1 THEN 'TRUE'
WHEN BW = 0 THEN 'FALSE'
END AS BW,
CASE
WHEN Subtitles IS NULL THEN ' '
WHEN Subtitles = 1 THEN 'TRUE'
WHEN Subtitles = 0 THEN 'FALSE'
END AS Subtitles
FROM Movie;
这会给你:
| MOVIE_ID | TITLE | YEAR_RELEASED | RATING_ID | BW | SUBTITLES |
|----------|----------------|---------------|-----------|------|-----------|
| 1 | Quiet Man, The | 1952 | 1 | | |
| 2 | McLintock! | 1963 | 3 | | |
| 3 | Thin Man,The | 1934 | 0 | TRUE | |
| 4 | Tampopo | 1985 | 4 | | TRUE |
您不能将其作为空字符串插入,因为列数据类型为 bit
。
注意:
NULL
不同于空串
- 在
bit
列数据类型中输入了 0
错误值。
- 您不能在
DATE
数据类型列中输入值 1952
、1963
等,而是像在 [=45= 中那样使用 YEAR
data type ] fiddle演示。
这就是我的 table 需要的样子:
MovieID Title YearReleased RatingID BW Subtitles
1 Quiet Man, The 1952 1
2 McLintock! 1963 3
3 Thin Man, The 1934 0 TRUE
4 Tampopo 1985 4 TRUE
这是我目前的代码:
CREATE TABLE MOVIE
(MOVIE_ID VARCHAR (2) PRIMARY KEY,
TITLE VARCHAR(20),
YEAR_RELEASED DATE,
RATING_ID VARCHAR(1),
BW BIT,
SUBTITLES BIT);
INSERT INTO MOVIE
VALUES
(1,'Quiet Man, The',1952,'1',NULL,NULL),
(2,'McLintock!',1963,'3',NULL,NULL),
(3,'Thin Man,The',1934,'0',(1),NULL),
(4,'Tampopo',1985,'4',NULL,(1));
我不明白如何插入空白点和真实值的数据。 :\ 我得到的是这样的:
MovieID Title YearReleased RatingID BW Subtitles
1 Quiet Man, The 1952 1 NULL NULL
2 McLintock! 1963 3 NULL NULL
3 Thin Man, The 1934 0 1 Null
4 Tampopo 1985 4 NULL 1
我的教授让我上网查找答案,因为它就在那里。 -_-
这是您要找的吗?
INSERT INTO MOVIE
VALUES
(1,'Quiet Man, The',1952,'1','',''),
(2,'McLintock!',1963,'3','',''),
(3,'Thin Man,The',1934,'0',(1),''),
(4,'Tampopo',1985,'4','',(1));
您还可以在创建时设置一个默认的空字符串 table
没问题,在您显示值的查询中使用 CASE
语句将 NULL
值替换为空字符串,将 0 替换为 False,将 1 替换为 true。像
SELECT MOVIE_ID,
Title,
YEAR_RELEASED,
RATING_ID,
CASE
WHEN BW IS NULL THEN ' '
WHEN BW = 1 THEN 'TRUE'
WHEN BW = 0 THEN 'FALSE'
END AS BW,
CASE
WHEN Subtitles IS NULL THEN ' '
WHEN Subtitles = 1 THEN 'TRUE'
WHEN Subtitles = 0 THEN 'FALSE'
END AS Subtitles
FROM Movie;
这会给你:
| MOVIE_ID | TITLE | YEAR_RELEASED | RATING_ID | BW | SUBTITLES |
|----------|----------------|---------------|-----------|------|-----------|
| 1 | Quiet Man, The | 1952 | 1 | | |
| 2 | McLintock! | 1963 | 3 | | |
| 3 | Thin Man,The | 1934 | 0 | TRUE | |
| 4 | Tampopo | 1985 | 4 | | TRUE |
您不能将其作为空字符串插入,因为列数据类型为 bit
。
注意:
NULL
不同于空串- 在
bit
列数据类型中输入了0
错误值。 - 您不能在
DATE
数据类型列中输入值1952
、1963
等,而是像在 [=45= 中那样使用YEAR
data type ] fiddle演示。