在SQL Server中更改SELECT语句中的列数据类型

3

我想将categoriID列中的数字值更改为文本。

这个可行吗?

SELECT name, CAST(categoriID AS char(10)) 
FROM customer
WHERE categoriID = 1 AS 'new_text'

这里是我想要的图片链接: http://i.imgur.com/EFWNH3w.png


该链接是指向一张图片的网址,您可以通过点击链接查看该图片。

1
WHERE子句中的AS无效。 - roYal
是的,但不在列中。我想要更改行中的数据。 - roYal
1
你想改变数据的吗?在转换为CHAR(10)后,它已经是一个文本值了。 - Giorgos Betsos
是什么?你想要改变数据的,例如从1变成one,还是其他什么? - Giorgos Betsos
是的,我想将数据的值更改为文本,而不是像图片中显示的1。 - roYal
显示剩余4条评论
4个回答

2

最简单的解决方案是进行简单的连接,代码如下:

SELECT  c.name, c.categoryID, category.name AS category_name
FROM    customer c
INNER JOIN -- or LEFT JOIN if categoryID allows NULLs
(
SELECT 1, 'First category' UNION ALL
SELECT 2, 'Second category' UNION ALL
SELECT 3, 'Third category'
) category(categoryID, name) ON c.categoryID = category.categoryID

如果分类列表较小、静态且仅用于此查询,我会使用此解决方案。

2)否则,我会创建一个新的表格,如下所示:

CREATE TABLE category -- or dbo.cateogory (note: you should use object's/table's schema)
(
    categoryID INT NOT NULL,
        CONSTRAINT PK_category_categoryID PRIMARY KEY(categoryID),
    name NVARCHAR(50) NOT NULL -- you should use the propper type (varchar maybe) and max length (100 maybe)
    --,      CONSTRAINT IUN_category_name UNIQUE(name) -- uncomment this line if you want to have unique categories (nu duplicate values in column [name])
);
GO

此外,我会创建一个外键,以确保 [customer] 表中的分类也存在于 [category] 表中:

ALTER TABLE customer 
ADD CONSTRAINT FK_customer_categoryID 
FOREIGN KEY (categoryID) REFERENCES category(categoryID)
GO

INSERT category (categoryID, name)
SELECT 1, 'First category' UNION ALL
SELECT 2, 'Second category' UNION ALL
SELECT 3, 'Third category'
GO

你的查询将会是:

SELECT  c.name, c.categoryID, ctg.name AS category_name
FROM    customer c
INNER JOIN ctg ON c.categoryID = ctg.categoryID -- or LEFT JOIN if c.categoryID allows NULLs 

我会选择方案#2。

谢谢,这正是我在寻找的。 - roYal

1

来自 SQL Server 2008 上的 这个可能是重复的 SO

EXEC sp_RENAME table_name , old_name, new_name

或者你可以这样做this:

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

编辑:刚刚收到问题。要将列的数据类型更改为文本数据类型,您可以执行以下操作:

ALTER TABLE table_name MODIFY column_name CHARACTER(n);

其中n是字符串中字符的数量,或者:

ALTER TABLE table_name MODIFY column_name VARCHAR(n)

其中n是字符串中的最大字符数。

请注意,这些操作将编辑原始表。如果您只想选择某个特定数据类型的列,则需要使用以下方法复制表:

SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;

然后,您可以像上面展示的那样修改列数据类型,并且如果需要,可以DROP新表。另一种不使用单独表格的方法是使用CASTCONVERT

感谢澄清。我正在编辑帖子以反映对问题的新理解。 - andrewgu

-1

您可以使用此查询更改列数据类型,

语法:

ALTER TABLE table_name ALTER COLUMN column_name datatype;

解决方案:

ALTER TABLE customer ALTER COLUMN categoriID Varchar(50);

-2

修改表 customer 中的列 categoriID 的数据类型为 TEXT


3
我不想改变数据库中的任何内容,我只想将其作为SELECT语句展示出来。 - roYal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接