Parse DateTime Параметр - PullRequest
       2

Parse DateTime Параметр

0 голосов
/ 27 января 2012

У меня есть переменная типа datetime. Как я могу получить shortdatetostring () как тип переменной datetime? У меня есть столбец в databae как тип datetime. Я хотел бы получить записи, которые добавляются в определенный день.

Пример:

 SELECT id FROM database WHERE added like @p1

Параметром запроса является переменная datetime.

Ответы [ 5 ]

1 голос
/ 27 января 2012

Соответствует на основе дня, месяца и года переменных даты. Не используйте строки, так как сопоставление медленное.

SELECT id 
    FROM database 
    WHERE Datepart(yy, added) = Datepart(yy, @p1)
      AND  Datepart(mm, added) = Datepart(mm, @p1)
      AND Datepart(dd, added) = Datepart(dd, @p1)
1 голос
/ 27 января 2012

Вы можете сделать что-то подобное, чтобы получить все идентификаторы 26 января.

0 голосов
/ 27 января 2012

Вы можете упростить это, отредактировав запрос.Попробуйте

select id from database where cast(added as date) = cast(@p1 as date)

Это (эффективно) удаляет время с added, а также с @p1 и сравнивает только даты.

0 голосов
/ 27 января 2012

Если вы используете параметризованные запросы, формат типа datetime не имеет значения.Нужно помнить, что «2012-01-26» - это строка, а не дата ....

Если вам нужно, чтобы Дата форматировалась определенным образом, то myDateTime.ToString (....), естьнесколько перегрузок, одна из которых является просто строкой формата, например "yyyy-MM-dd"

Если вы хотите проанализировать строку в datetime, тогда DateTime.Parse (...), снова есть несколько перегрузок.

Подробнее о датах после комментария

DateTime.Parse ("31.12.2012") предоставляет тип datetime в c #.Он анализирует строку в DateTime

MyDateTime.ToString ("MM / dd / yyyy") и дает вам строку даты в указанном формате.

"31/12/2012" - этоне дата, если вы хотите, чтобы она была датой, то вы разбираете ее на одну.

Теперь, в каком направлении вы хотите перейти DateTime в строку, или в строку DateTime, или вы спрашиваете что-то полностьюотличается?

Если вы хотите использовать только Parse DateTimes, которые имеют формат mm / dd / yyyy, вы не можете этого сделать, потому что, когда это строка, абсолютно невозможно отличить 6 августа от 8 июня,если только вы не предполагаете, что формат всегда равен mm / dd / yyyy, что в какой-то момент гарантированно пойдет не так, поэтому при переходе от Date к String YYYYMMDD или YYYY-MM-DD - путь.

Если это то, что вы хотите / должны сделать, то

DateTime MyDateTime = DateTime.Parse("12/31/2012",CultureInfo.CurrentCulture);

Передайте строку в формате, который не соответствует шаблону, и это вызовет исключение, NB, который будет включать "31/12 /2012 ".

CultureInfo находится в System.GlПространство имен obalisation.

Есть несколько вариантов.Current, CurrentUI, Invariant и т. Д. То, что вы используете, зависит от того, как вы настроены, а также от требований глобализации / интернационализации (даже если их нет).Таким образом, используя Current Culture, мы принимаем региональные настройки по умолчанию в США.Но если бы я запустил ваш код, то «31/12/2012» сработало бы, а «31.12.2012» взорвало бы фрагменты.

Если вы хотите исправить форматы, независимо от того, в какой системе они находятсязатем запустить InvariantCulture.Не забудьте также установить нейтральный язык.Нажмите кнопку сборки на вкладке Приложения на страницах свойств проекта.Нейтральный язык - это выпадающий список внизу.Предположительно, вы хотите en-us.

Если вы не хотите исключения, тогда это

DateTime myDateTime;
if (DateTime.TryParse("12/31/2012",CultureInfo.CurrentCulture, out myDateTime)
{
   // do something with myDateTime...
}
else
{
    // do something about the value not being in the correct format
}
0 голосов
/ 27 января 2012

В C # вы делаете, как показано ниже.

DateTime dt;
string Temp1 = "Your Date";
if (DateTime.TryParse(Temp1, out dt))
{
     // If it is a valid date
     string date = dt.ToShortDateString();
     string time = dt.ToShortTimeString();
}

В SQL Server

SELECT id FROM database WHERE Datepart(dd, added) = Datepart(dd, @p1)

Пожалуйста, смотрите ниже образец

create table #temp
(
    dat datetime,
)

insert into #temp(dat)values(GETDATE())
insert into #temp(dat)values(GETDATE()+1)
insert into #temp(dat)values(GETDATE()+2)

select * from #temp where DATEPART(dd, dat) > 27
drop table #temp

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...