相关疑难解决方法(0)

SQL Server将字符串转换为datetime

这不是问如何在MSSQL中将任意字符串转换为日期时间,例如这个问题.

我可以控制字符串格式,但我想知道使用日期字符串更新日期时间字段的MSSQL语法.

sql sql-server string datetime

44
推荐指数
2
解决办法
35万
查看次数

将日期时间值设置为SQL Server中的变量的正确方法

可能重复:
转换和验证日期字符串的最佳方法

在SQL Server中为datetime变量分配日期时间值时,哪种格式最适合用于文化无关的原因以及为什么?

下面的日期是2013年12月1日

DECLARE @myDate DATETIME
SET @myDate = '2013-12-01'
SET @myDate = '20131201'
SET @myDate = '12/01/2013'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'
Run Code Online (Sandbox Code Playgroud)

如果@myDate是类型DATETIME2,你的答案会不同吗?

sql-server datetime

13
推荐指数
2
解决办法
8万
查看次数

为什么我的CASE表达式不确定?

我试图使用CASE表达式创建一个持久的计算列:

ALTER TABLE dbo.Calendar ADD PreviousDate AS 
case WHEN [Date]>'20100101' THEN  [Date]
    ELSE NULL
    END PERSISTED
Run Code Online (Sandbox Code Playgroud)

MSDN清楚地说CASE是确定性的,在这里

但是,我收到一个错误:

消息4936,级别16,状态1,行1"表日历"中的计算列"PreviousDate"无法保留,因为该列是非确定性的.

当然,我可以创建一个标量UDF并明确声明它是确定性的,但是有更简单的方法吗?我已经在获取最新的服务包了.谢谢.

sql sql-server calculated-columns sql-server-2008 persisted-column

6
推荐指数
2
解决办法
4469
查看次数

SQL日期比较仅使用日期而不是时间

这本来是一个关于如何实现这个问题的问题,因为我被困在某一部分,但我现在很好奇为什么这首先发生了.如果时间没有差别,我只需要比较日期而不是时间,这不是问题.下面的代码显示了我最初尝试的查询

SELECT *
FROM Employee e
inner join OT_Hours o on o.Emp_ID=e.Emp_ID
inner join Position p on p.Position_ID=e.Position_ID
inner join Signup_Sheet s on s.Employee_ID=e.Emp_ID
WHERE e.Eligible_OT=1 and s.Day_Shift = 1 
and p.Position_Name = 'Controller' 
and Convert(Varchar(20),s.Date,101) = '07/26/2010'
and Convert(Varchar(20),o.Date,101) <='07/26/2010'
and Convert(Varchar(20),o.Date,101) > '07/26/2009'
and o.Quantity NOT IN(0.3) order by o.Date DESC
Run Code Online (Sandbox Code Playgroud)

当我运行该查询时,我没有得到任何结果,但当我删除第二行后,它将返回12个结果(<=),当我删除第3个最后一行但保留第二个最后一行时,它将返回6个结果(>).在查看数据后,我可以看到应该返回其中4个结果.现在为了奇怪的部分.以下是我目前使用的代码.

SELECT DISTINCT o.Date, e.Emp_ID as Emp_ID, e.First_Name+ ' ' +e.Last_Name as Name, o.Quantity as Sum
FROM Employee e
left join OT_Hours o on o.Emp_ID=e.Emp_ID
left join …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server date-comparison

4
推荐指数
2
解决办法
2万
查看次数

使用VBA在SQL中插入德语日期格式

我在这里非常沮丧,已经尝试了好几天...我想要的只是德国用户能够输入应该存储在SQL Server中的日期.日期采用以下格式"dd.mm.yyyy".我总是收到类似这样的错误消息:查询表达式'#23.01.2004 00:07:00#'中的日期语法错误. - 暂时使用Access.

我已经尝试了很多方法(Thread.CultureInfo,CDate(),Formatting DateTimeStyles)但这里是我最新的:

Dim dTermin As DateTime
dTermin = DateTime.Parse(txtTermin.Text)

sSQL = "INSERT INTO Termin (Termin) VALUES ("
sSQL = sSQL & "#" & dTermin & "#)"
Run Code Online (Sandbox Code Playgroud)

这也给了我一个错误.如果我硬编码像"10-04-2004"这样的日期,那么它的确有效.它是一个Access 2000 db,有两个字段:ID(自动编号)和终端(ShortDate).使用Jet OLEDB 4.0 Provider.

sql t-sql sql-server vba

3
推荐指数
1
解决办法
2148
查看次数

两个日期时间字段之间的SQL Server,无法正常工作

SQL Server 2005:

以下观点

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/01/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

截止日期为2011年3月2日至2011年3月31日.

如果我将第一个日期更改为03/00/2011

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/00/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

它现在提供2011年3月1日至2011年3月31日的数据

KeyedTimestamp字段是DateTime,并且有时间与这些记录相关联.2011年3月31日的所有记录都已计算在内.我知道我可以通过在第二个日期之间提供最大时间来实现这一点,所以我不是在寻找替代where子句,而是要理解为什么它忽略了第一个的记录,即使它合并了从31日开始.

它几乎就像它在3月1日23:59:59检查,我希望我可以消除这种检查,我只关心日期,而不是时间

sql-server between

2
推荐指数
1
解决办法
3万
查看次数

日期时间的确定性非可空截断函数

我正在为datetime寻找一个确定性截断函数,这个函数完成了这项工作:

DATEADD(dd, DATEDIFF(dd, 0, @date), 0)
Run Code Online (Sandbox Code Playgroud)

但这应该是持久计算列的输入,它将成为主键的一部分,因此它必须是不可为空的.所以我做了这个:

ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), '01.01.1900')
Run Code Online (Sandbox Code Playgroud)

但现在表达变得不确定了.任何人都可以告诉我为什么,以及如何让它确定性?

谢谢!

sql sql-server-2005

2
推荐指数
1
解决办法
150
查看次数

存储SQL Server 2005日期时间

我有一个PHP脚本通过SQL将值插入SQL Server 2005表

$date = '15 Jun 2011 00:00';
$sql = "INSERT INTO shows ( DateStart ) VALUES ( '$date')"; 
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

1)如何最好地将此日期转换为SQL Server可以理解的内容?我的系统上的默认格式是mm/dd/yyyy,但我想将日期显示为用户可读.

2)插入空字符串时,DateStart值设置为1/1/1900.如何最好地将"无效"日期转换为NULL(该列已经接受NULL),以便在$date = ""那时DateStart IS NULL

谢谢!

sql sql-server datetime sql-server-2005

1
推荐指数
1
解决办法
222
查看次数

批量以YYYYMM格式将日期插入MS SQL表中的日期字段

我有一个大文本文件(超过3亿条记录).有一个字段包含YYYYMM格式的日期.目标字段是日期类型,我正在使用MS SQL 2008 R2服务器.由于数据量巨大,我更喜欢使用批量插入.这是我已经做过的事情:

bulk insert Tabela_5
from 'c:\users\...\table5.csv'
with
(
    rowterminator = '\n',
    fieldterminator = ',',
    tablock
)
select * from Tabela_5
Run Code Online (Sandbox Code Playgroud)

201206在文件中原来是2020-12-06在服务器上,而我希望它2012-06-01(我不关心这一天).有没有办法将这种格式的日期批量插入日期类型的字段?

亲切的问候maciej pitucha

t-sql sql-server bulk sql-server-2008-r2 date-formatting

1
推荐指数
2
解决办法
2万
查看次数

如何检查(var)char是否是有效的ISO日期(112)

我有一个char(8)字段,它should确实包含yyyymmdd dateformat中的值.鉴于(假设的)表格,id(int)|datestring(char(8))我希望能够做类似的事情

SELECT id, isValidDate(datestring) FROM my_hypothetical_table
Run Code Online (Sandbox Code Playgroud)

对我来说这很重要,因为它可以像查询一样运行(例如,我可以SELECT * from othertable INNER JOIN hypothetical_table on hypothetical_table.id = othertable.hypothetical_FK WHERE isValidDate(hypothetical_table.datestring) = 1).捕获错误似乎不可行.

请注意,IsDate()函数仅适用于斜杠分隔日期,而不适用于yyyymmdd格式.

t-sql sql-server datetime

0
推荐指数
2
解决办法
1921
查看次数