Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取该月的2位数字_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 获取该月的2位数字

Sql 获取该月的2位数字,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个整数列“月” 我想要一个月的两位数的数字 这就是我尝试过的:DATEPART(mm,@Date) 它返回一月到九月的一位数 我正在使用SQLServer2008 有人有建议吗?先将值强制转换为varchar,检查值是否介于1和9之间,然后在建议之前追加0 select case when DATEPART(month, getdate()) between 1 and 9 then '0' else '' end + cast(DATEPART(month, getdate()) as

我有一个整数列“月” 我想要一个月的两位数的数字

这就是我尝试过的:DATEPART(mm,@Date)

它返回一月到九月的一位数 我正在使用SQLServer2008


有人有建议吗?

先将值强制转换为varchar,检查值是否介于1和9之间,然后在建议之前追加0

select case when DATEPART(month, getdate()) between 1 and 9 
then '0' else '' end + cast(DATEPART(month, getdate()) as varchar(2))

DATEPART的替代方案

SELECT LEFT(CONVERT(CHAR(20), GETDATE(), 101), 2)

皮纳尔·戴夫(Pinal Dave)有一篇很好的文章,其中有一些关于如何使用的示例

一种方法是使用
RIGHT
函数,这将使语句类似于以下内容:

SELECT RIGHT('00' + CAST(DATEPART(mm, @date) AS varchar(2)), 2)
尝试:


做这件事有不同的方法

  • 使用RTRIM并指定范围

  • 在将日期转换为文本后,使用子字符串仅提取月份部分

可能还有其他方法可以实现此功能。

函数

FORMAT(date,'MM') 
将使用两位数完成此任务。

另一个简单的技巧:

SELECT CONVERT(char(2), cast('2015-01-01' as datetime), 101) -- month with 2 digits
SELECT CONVERT(char(6), cast('2015-01-01' as datetime), 112) -- year (yyyy) and month (mm)
产出:

01
201501

对我来说,最快的解决办法是

DATE_FORMAT(CURDATE(),'%m')
可以简单地使用:

SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2)
我的做法是:

right('0'+right(datepart(month,[StartDate]),2),2)
内部“right”函数的原因是防止SQL将其作为数学加法来执行,这将再次给我们留下一个数字。

CONVERT(char(2),getdate(),101)

选择REPLACE(CONVERT(varchar,MONTH(getdate())*0.01),“0.”

有关过多的选项,请参阅此线程:我遇到了相同的问题,但针对SQL Server 2012。根据用户3829053的回答,我计算出至少对于那个版本,选择格式(月(@Date),'00')或选择格式(datepart(mm,@Date),'00')是有效的。我没有得到想要的结果。sql server management studio是否可能被设置为忽略前导空值?@Adam-尝试看看用
GETDATE()
替换@date是否有区别?属性类型为整数。我没有得到前导零。由于列类型是整数,这对结果有什么影响?列类型必须是char才能运行吗?看起来atributte类型必须是char。然后我得到所需的输出。我认为,对于integer,不可能得到与atrubutte类型相同的结果。或者?如果您可以更改您希望比较月份的月份格式,那么会容易得多。例如,如果您得到@month int=2的值,并且希望将它的值/@month\u compare varchar(20)与值“02”进行比较,则只需在执行此操作之前将/@month\u compare转换为int,否则请更改month列的数据类型。为MariaDB修改了选择权(concat('0',RTRIM(month('2013-12-12')),2)添加到SQL Server 2012中。问题是使用2008。我正在搜索这样的解决方案,因为我从Python中知道这个函数。事实上,我不知道它是2012年新推出的。这非常有效!需要注意的是,这要求输入是一个日期变量,不仅看起来像一个,例如FORMAT('2017-01-01','MM')失败,而且FORMAT(GETDATE(),'MM')有效。这既不是tsql,也不是问题中标记的Sql server 2008。GETDATE()将返回'2018-10-29',因此这将为您提供
20
。虽然这可能对您的配置有效,但这不是一种安全的实现方法。不,@Simon_Weaver,GETDATE()将为您获取日期,使用参数101进行转换将把月份放在第一位,@Vinay抱歉-您是对的。我看到了
101=mm/dd/yyyy
,因此无论您的服务器位于何处,这都将始终有效。谢谢@andrewr纠正我的错误。[我在答案中添加了一个空格,以便能够向上投票]虽然此代码可以回答该问题,但提供了有关此代码为什么和/或如何回答该问题的附加上下文,以提高其长期价值。@Scott,欢迎使用此代码!除了上面所说的“β.εηοιτ.βε”之外,提到你的答案如何解决以前的答案没有解决的问题也会有所帮助。
DATE_FORMAT(CURDATE(),'%m')
SELECT RIGHT('0' + CAST(MONTH(@Date) AS NVARCHAR(2)), 2)
right('0'+right(datepart(month,[StartDate]),2),2)