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

时间:2015-02-22 21:09:25

标签: sql sql-server

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

这可能吗?

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

以下是我想要的照片的链接:http://i.imgur.com/EFWNH3w.png

4 个答案:

答案 0 :(得分:1)

1)最简单的解决方案就是简单的连接:

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

加上我会创建一个外键,以确保[category]表中的类别也存在于[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。

答案 1 :(得分:0)

来自SQL Server 2008上的this possible duplicate SO

EXEC sp_RENAME table_name , old_name, new_name

或者你可以this

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

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

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。没有单独表格的另一种方法是使用CAST or CONVERT

答案 2 :(得分:0)

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

语法:

ALTER TABLE table_name ALTER COLUMN column_name datatype;

解决方案:

ALTER TABLE customer ALTER COLUMN categoriID Varchar(50);

答案 3 :(得分:-2)

ALTER TABLE customer CHANGE categoriID categoriID TEXT