Службы Reporting Services удаляют время из DateTime в выражении

Я пытаюсь заполнить выражение (значение параметра по умолчанию) явным временем. Как удалить время из функции «сейчас»?


person Jeff    schedule 08.09.2009    source источник
comment
Ознакомьтесь со способом 1: stackoverflow.com/a/19693553/2635532   -  person Anup Agrawal    schedule 05.02.2016
comment
Важно отметить, что даже если SQL в ‹CommandText› возвращает только переменную Date, rdl все равно будет использовать DateTime. Следовательно, он должен быть отформатирован с помощью rdl - см. различные ответы ниже.   -  person JosephDoggie    schedule 15.01.2020


Ответы (14)


Что-то вроде этого:

=FormatDateTime(Now, DateFormat.ShortDate) 

Где «Сейчас» можно заменить именем поля даты/времени, которое вы пытаетесь преобразовать.)
Например,

=FormatDateTime(Fields!StartDate.Value, DateFormat.ShortDate)
person Michael Maddox    schedule 08.09.2009
comment
Поскольку мой параметр даты был датой и временем, мне потребовался дополнительный CDate() вокруг приведенного выше выражения. - person Nick.McDermaid; 13.03.2014
comment
Не сработает, если отчет требуется в формате Excel. FormatDateTIme — строковая функция. Конечно, время удаляется, но результатом является строковый столбец даты, который при сортировке будет отсортирован как строка слева направо. Пользователю придется преобразовать столбец в реальную дату, используя текст в столбцы. - person Fandango68; 21.06.2016
comment
Дело в том, что вы не можете делать то, что задал OP, только в формате Date. Вы застряли со строковыми датами. - person Fandango68; 21.06.2016
comment
Это дало мне именно то, что мне было нужно. У меня был столбец DOB, который, по предположению SSRS, должен был добавить время. Microsoft действительно необходимо обновить это программное обеспечение. - person tdelozie; 28.01.2021

Поскольку SSRS использует VB, вы можете сделать следующее:

=Today() 'returns date only

Если бы вы использовали:

=Now() 'returns date and current timestamp
person RSolberg    schedule 08.09.2009
comment
=Today() не возвращает дату только в SSRS - person donviti; 29.07.2014
comment
Чтобы уточнить, Today() возвращает дату только с точки зрения значения, но возвращаемый тип данных — DateTime. - person Chris Mack; 14.11.2018

=CDate(Now).ToString("dd/MM/yyyy")

Хотя вы жестко кодируете формат даты в локали.

person Perhentian    schedule 19.01.2010
comment
+1 за краткий ответ, который, на самом деле, был мне очень полезен. - person jasonco; 20.01.2010
comment
Как я упоминал выше, это работает, но превращает столбец в строку. Это все еще не настоящий тип данных DATE. - person Fandango68; 21.06.2016


Просто используйте DateValue(Now), если вы хотите, чтобы результат имел тип данных DateTime.

person user1165019    schedule 13.04.2012

Если ожидаемый формат данных MM-dd-yyyy, попробуйте ниже,

=CDate(Now).ToString("MM-dd-yyyy")

Аналогично вы можете попробовать это,

=Format(Today(),"MM-dd-yyyy") 

Вывод: 02-04-2016

Примечание.
Now() покажет вам текущую дату и отметку времени.

Today() покажет вам Дату, а не время.

Также вы можете установить любой формат даты вместо MM-dd-yyyy в моем примере.

person pedram    schedule 04.02.2016

В свойстве формата любого поля текстового поля вы можете использовать строки формата:

например Д/М/Г, Д и т. д.

person zzawaideh    schedule 09.09.2009
comment
Вопрос относится к значению параметра отчета по умолчанию, поэтому установка формата в текстовом поле не будет работать. Кроме того, D/M/Y не даст ожидаемого результата, вместо этого попробуйте dd/MM/yyyy. - person Valentino Vranken; 31.07.2012

Одна вещь, которая может помочь другим, заключается в том, что вы можете поместить: =CDate(Now).ToString("dd/MM/yyyy") в свойство строки формата SSRS, которое можно получить, щелкнув правой кнопкой мыши столбец. Это самый чистый способ сделать это. Тогда ваше выражение не будет слишком большим и сложным для визуального "разбора" :)

person lbranjord    schedule 27.02.2013

Я опаздываю в игре, но я пробовал все решения выше! не смог заставить его сбросить нули в параметре и дать мне значение по умолчанию (он игнорировал форматирование или казался пустым). Я использовал SSRS 2005, поэтому боролся с его неуклюжими / глючными проблемами.

Мой обходной путь состоял в том, чтобы добавить столбец в пользовательскую таблицу [DimDate] в моей базе данных, из которой я извлекал даты. Я добавил столбец, который представлял собой строковое представление в желаемом формате столбца [дата]. Затем я создал 2 новых набора данных в SSRS, которые извлекли следующие запросы для 2 значений по умолчанию для моих значений по умолчанию «Кому» и «От»:

'от'

    SELECT  Datestring
    FROM    dbo.dimDate
    WHERE   [date] = ( SELECT   MAX(date)
                       FROM     dbo.dimdate
                       WHERE    date < DATEADD(month, -3, GETDATE()
                     )

'to'

    SELECT  Datestring
    FROM    dbo.dimDate
    WHERE   [date] = ( SELECT   MAX(date)
                       FROM     dbo.dimdate
                       WHERE    date <= GETDATE()
                     )
person Chris Wood    schedule 19.06.2014

Мое решение для параметра даты/времени:

=CDate(Today())

Хитрость заключается в том, чтобы преобразовать обратно в DateTime, как рекомендует Perhentian.

person will webster    schedule 18.09.2015


Просто соедините строку в конец значения:

Fields!<your field>.Value & " " 'test' 

и это должно работать!

person amad    schedule 14.07.2017
comment
Привет, Натан. Не могли бы вы рассказать подробнее о своем редактировании? извините, я новичок в stackoverflow. С Уважением! - person amad; 14.07.2017

Это должно быть сделано в наборе данных. Вы могли бы сделать это

Select CAST(CAST(YourDateTime as date) AS Varchar(11)) as DateColumnName

В SSRS Layout просто сделайте это =Fields!DateColumnName.Value

person Ricky Hope    schedule 30.07.2015
comment
Компонент времени не будет удален, если DateColumnName является типом данных DateTime. ОП хочет только дату. - person Fandango68; 21.06.2016

person    schedule
comment
Вам не хватает второго параметра выражения FormatDateTime(DateField, DateFormat) - person ShellNinja; 23.01.2014