我想将categoriID
列中的数字值更改为文本。
这个可行吗?
SELECT name, CAST(categoriID AS char(10))
FROM customer
WHERE categoriID = 1 AS 'new_text'
这里是我想要的图片链接: http://i.imgur.com/EFWNH3w.png
该链接是指向一张图片的网址,您可以通过点击链接查看该图片。
我想将categoriID
列中的数字值更改为文本。
这个可行吗?
SELECT name, CAST(categoriID AS char(10))
FROM customer
WHERE categoriID = 1 AS 'new_text'
这里是我想要的图片链接: http://i.imgur.com/EFWNH3w.png
最简单的解决方案是进行简单的连接,代码如下:
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
来自 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
新表。另一种不使用单独表格的方法是使用CAST
或CONVERT
。您可以使用此查询更改列数据类型,
语法:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
解决方案:
ALTER TABLE customer ALTER COLUMN categoriID Varchar(50);
修改表 customer 中的列 categoriID 的数据类型为 TEXT
CHAR(10)
后,它已经是一个文本值了。 - Giorgos Betsos