sql 2005 可以将varchar值转换为int值吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 2005 可以将varchar值转换为int值吗?相关的知识,希望对你有一定的参考价值。
比如一个varchar字段 201104-001 , 我想设置为主键,可是好像varchar不能设置为主键,
怎么将Varchar 转换 成 int 值呢???
USE 你的数据库名称
ALTER TABLE 201104-001 所在的表名称
ALTER COLUMN 201104-001的字段名称 INT
还有201104-001,这个可不能是INT类型的哦 参考技术B 字符型也可以设主键的,主键的作用就是唯一性(unique)加上非空(not null)的组合,给类型无关,还有哪有人给字段起名字这样起的,/*比如一个varchar字段 201104-001*/
如果想该就用这条sql语句该
alter table table_name alter column column_name int; 参考技术C 跟类型没有关系吧。直接设置就行 参考技术D varchar可以设置为主键啊追问
可以设置主键吗? 俺是新手 还以为不可以呢 因为插入一组数据没插进去,可能是操作错误吧
如果要转换 可以转换吗?
转换的话需要你的列值可以转换成int型,比如都说数字就可以。不能有字符型的值
本回答被提问者采纳将 varchar 数据类型转换为 datetime 数据类型导致 SQL 查询中的值超出范围
【中文标题】将 varchar 数据类型转换为 datetime 数据类型导致 SQL 查询中的值超出范围【英文标题】:Conversion of a varchar data type to a datetime data type resulted in an out-of-range value in SQL query 【发布时间】:2015-02-02 05:05:41 【问题描述】:我有一个表,其中有一列存储日期和时间。我需要编写一个查询以仅从该列中获取日期,
SELECT CAST(CONVERT(VARCHAR, LoginTime, 101) AS datetime) FROM AuditTrail
但是,当我运行查询时,我收到了这个错误:
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
列中的数据是日期时间,例如:2012-06-18 12:08:04.000 所以我只需要提取日期并删除时间 注意 [Logintime] 列是数据时间格式
【问题讨论】:
向我们展示你拥有的 varchar 字段中的日期格式? 采用哪种日期格式?? How to select date without time in SQL 的可能重复项 这是日期的格式 [2012-06-18 12:08:09.000] 【参考方案1】:在 SQL Server 中尝试ISDATE()
函数。如果为 1,则选择有效日期。如果 0 选择无效日期。
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
WHERE ISDATE(LoginTime) = 1
Click here查看结果
编辑:
根据您的更新我只需要提取日期并删除时间,然后您可以简单地使用内部CONVERT
SELECT CONVERT(VARCHAR, LoginTime, 101) FROM AuditTrail
或
SELECT LEFT(LoginTime,10) FROM AuditTrail
编辑 2:
错误的主要原因将在您在 WHERE 子句中的日期。即,
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('06/18/2012' AS DATE)
将不同于
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('18/06/2012' AS DATE)
结论
在EDIT 2中,第一个查询尝试以mm/dd/yyyy
格式过滤,而第二个查询尝试以dd/mm/yyyy
格式过滤。它们中的任何一个都会失败并抛出错误
导致将 varchar 数据类型转换为 datetime 数据类型 在一个超出范围的值。
因此,请确保使用mm/dd/yyyy
或dd/mm/yyyy
格式过滤日期,无论哪个在您的数据库中有效。
【讨论】:
@sarath 发布的最后一个查询运行良好,但是当我使用 where 语句比较日期时它不起作用 SELECT CONVERT(VARCHAR, LoginTime, 101) FROM AuditTrail where CONVERT(VARCHAR, LoginTime, 101) 尝试 where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) @Noora 我收到 [从字符串转换日期和/或时间时转换失败。] 你能告诉我你想要做的查询吗? @Noora 上面写的相同查询【参考方案2】:希望对您有所帮助:
SELECT CAST(LoginTime AS DATE)
FROM AuditTrail
如果你想在这个日期时间或不同部分有一些过滤器,你可以使用内置函数,例如年和月
【讨论】:
【参考方案3】:正如您在这个问题的答案中看到的: Conversion of a varchar data type to a datetime data type resulted in an out-of-range value
-- set the dateformat for the current session
set dateformat dmy
-- The conversion of a varchar data type
-- to a datetime data type resulted in an out-of-range value.
select cast('2017-08-13 16:31:31' as datetime)
-- get the current session date_format
select date_format
from sys.dm_exec_sessions
where session_id = @@spid
-- set the dateformat for the current session
set dateformat ymd
-- this should work
select cast('2017-08-13 16:31:31' as datetime)
【讨论】:
【参考方案4】:我也遇到过同样的问题。我已经在 SQL Server 中以 'YYYY-MM-DD HH:NN:SS' 格式存储日期大约 20 年了,但今天,使用 OleDbCommand 和 UPDATE 查询的 C# 解决方案已经无法做到这一点了。
我的问题的解决方案是删除格式中的连字符 - ,因此生成的格式现在是 'YYYYMMDD HH:MM:SS'。我不知道为什么我以前的格式不再有效,但我怀疑与 ADO 的某些 Windows 更新有关。
【讨论】:
【参考方案5】:有些问题,但我找到了解决办法,这是:
2 月 2 日 2 月 28 日(闰年 29)
这是我的代码
public string GetCountArchiveByMonth(int iii)
// iii: is number of months, use any number other than (**2**)
con.Open();
SqlCommand cmd10 = con.CreateCommand();
cmd10.CommandType = CommandType.Text;
cmd10.CommandText = "select count(id_post) from posts where dateadded between CONVERT(VARCHAR, @start, 103) and CONVERT(VARCHAR, @end, 103)";
cmd10.Parameters.AddWithValue("@start", "" + iii + "/01/2019");
cmd10.Parameters.AddWithValue("@end", "" + iii + "/30/2019");
string result = cmd10.ExecuteScalar().ToString();
con.Close();
return result;
现在进行测试
lbl1.Text = GetCountArchiveByMonth(**7**).ToString(); // here use any number other than (**2**)
**
因为检查
**February**
已达到最大值 28 天,
**
【讨论】:
以上是关于sql 2005 可以将varchar值转换为int值吗?的主要内容,如果未能解决你的问题,请参考以下文章
将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围
错误 sql:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围
从 SQL Server 2005 中的用户定义函数中“捕获”错误
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题
将 varchar 数据类型转换为 datetime 数据类型导致 SQL 查询中的值超出范围
从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围