从硬编码的日期值中获取月份和日期

时间:2018-06-14 18:51:01

标签: sql sql-server

// Helpers

var iframeClickedLast;

function eventFromIframe(event) {
  var el = event.target;
  return el && el.tagName && el.tagName.toLowerCase() == 'iframe';
}

function getIframeSrc(event) {
  var el = event.target;
  return eventFromIframe(event) ? el.getAttribute('src') : '';
}

// Events

function windowBlurred(e) {
  var el = document.activeElement;
  if (el.tagName.toLowerCase() == 'iframe') {
    console.log('Blurred: iframe CLICKED ON', 'SRC:', el.getAttribute('src'), e);
    iframeClickedLast = true;
  } 
  else {
    console.log('Blurred', e);
  }
}

function windowFocussed(e) {
  if (iframeClickedLast) {
    var el = document.activeElement;
    iframeClickedLast = false;
    console.log('Focussed: iframe CLICKED OFF', 'SRC:', el.getAttribute('src'), e);
  } 
  else {
    console.log('Focussed', e);
  }
}

function iframeMouseOver(e) {
  console.log('Mouse Over', 'SRC:', getIframeSrc(e), e);
}

function iframeMouseOut(e) {
  console.log('Mouse Out', 'SRC:', getIframeSrc(e), e);
}

// Attach Events

window.addEventListener('focus', windowFocussed, true);  
window.addEventListener('blur', windowBlurred, true);

var iframes = document.getElementsByTagName("iframe");
for (var i = 0; i < iframes.length; i++) {
  iframes[i].addEventListener('mouseover', iframeMouseOver, true);
  iframes[i].addEventListener('mouseout', iframeMouseOut, true);
}

如果运行上面的查询,结果为'Jun 1',所以月份的前三个字母,空格和日期的第一个数字。但是,如果我用一个硬编码的值(如下面的查询)替换getdate()函数,结果会发生巨大变化。

select convert(varchar(5),getdate(), 100)

如果结果必须是月份的前三个字符和两个数字日期且没有空格

,那么如何编写查询?

4 个答案:

答案 0 :(得分:1)

试试这个

DECLARE @date DATE;


set @date = '2018-05-01 00:00:00.000';
select convert(varchar(6),@date, 100);

答案 1 :(得分:1)

format()之前,有datename()。这应该做你想要的:

select left(datename(month, getdate()), 3) + right('00' + datename(day, getdate()), 2)

您也可以使用您的方法,但需要替换空格:

select replace(replace(convert(varchar(6), cast('2018-05-01 00:00:00.000' as date), 100), '  ', '0'), ' ', '0')

答案 2 :(得分:0)

这是因为您传递了varcharstring类型日期'2018-05-01 00:00:00.000',例如:

select left('2018-05-01 00:00:00.000', 5)

如果您想要相同的结果,则需要将它们转换为合理的格式

select convert(varchar(6),cast('2018-06-01' as date), 100)

我误读了 last 行,如果你不想要空格,那么只需简单地使用replace()

select replace(replace(convert(varchar(6), cast('2018-06-01' as date), 100), '  ', '0'), ' ', '0')

答案 3 :(得分:0)

您可以将时间戳转换为日期,然后以您喜欢的方式格式化:

select format(cast('2018-05-01 00:00:00.000' as date), 'MMMdd')