Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.
Вы вправе использовать [DateTime]
объекты при сравнении, но учтите, что эти объекты всегда содержат время.
Удобно, что вы можете использовать свойство .Date
такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.
Вытащив мое измененное утверждение if
снизу, вы можете сделать это так:
if ($dirDate.Date -lt $lastSaturday.Date -and $dirDate.Date -ge $weekAgoSunday.Date) {
# do stuff
}
Теперь вы сравниваете только даты и игнорируете время!
if
работает, как ожидалось. Подводя итог, вы говорите, что:
$dateTimeObjectFromRegex
это Saturday, January 12, 2019 12:00:00 PM
$lastSaturday
это Saturday, January 12, 2019 3:59:04 PM
$weekAgoSunday
это Sunday, January 6, 2019 12:00:00 AM
if(([datetime]$dateTimeObjectFromRegex -lt [datetime]$lastSaturday)
-and ([datetime]$dateTimeObjectFromRegex -ge [datetime]$weekAgoSunday))
Поэтому в псевдокоде это:
if (
("January 12, 2019 12:00:00 PM" is earlier than "January 12, 2019 3:59:04 PM") # true
and
("January 12, 2019 12:00:00 PM" is later or the same as "January 6, 2019 12:00:00 AM") # true
) # true
Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.
$lastSaturday = GetLastSaturdayDate
$lastSaturday = [datetime]$lastSaturday
$weekAgoSunday = GetWeekAgoSundayDate
$weekAgoSunday = [datetime]$weekAgoSunday
Ваши функции уже возвращают [DateTime]
объекты, поэтому нет необходимости в этих приведениях.
$temp = Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.
Вы вправе использовать [DateTime]
объекты при сравнении, но учтите, что эти объекты всегда содержат время.
Удобно, что вы можете использовать свойство .Date
такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.
Вытащив мое измененное утверждение if
снизу, вы можете сделать это так:
[110] Теперь вы сравниваете только даты и игнорируете время!
[1123 На основании того, что вы показываете, похоже, что оператор if
работает, как ожидалось. Подводя итог, вы говорите, что:
$dateTimeObjectFromRegex
это Saturday, January 12, 2019 12:00:00 PM
$lastSaturday
это Saturday, January 12, 2019 3:59:04 PM
$weekAgoSunday
это Sunday, January 6, 2019 12:00:00 AM
[ 1127] Условным условием является: [111]
Поэтому в псевдокоде это:
[112] Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.
[113] Ваши функции уже возвращают [DateTime]
объекты, поэтому нет необходимости в этих приведениях.
[114] Это довольно сложно, вы можете упростить его до чего-то вроде этого:
if ( Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.
Вы вправе использовать [DateTime]
объекты при сравнении, но учтите, что эти объекты всегда содержат время.
Удобно, что вы можете использовать свойство .Date
такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.
Вытащив мое измененное утверждение if
снизу, вы можете сделать это так:
[110] Теперь вы сравниваете только даты и игнорируете время!
[1123 На основании того, что вы показываете, похоже, что оператор if
работает, как ожидалось. Подводя итог, вы говорите, что:
$dateTimeObjectFromRegex
это Saturday, January 12, 2019 12:00:00 PM
$lastSaturday
это Saturday, January 12, 2019 3:59:04 PM
$weekAgoSunday
это Sunday, January 6, 2019 12:00:00 AM
[ 1127] Условным условием является: [111]
Поэтому в псевдокоде это:
[112] Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.
[113] Ваши функции уже возвращают [DateTime]
объекты, поэтому нет необходимости в этих приведениях.
[114] Это довольно сложно, вы можете упростить его до чего-то вроде этого:
[115] Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
.Name -match '(\d{4}-\d{2}-\d{2}) Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
) {
# in here, you know the match was successful
$dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something
if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) {
# do stuff
}
}
Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
$regex = [regex]::Matches($temp,'([0-9]+)-([0-9]+)-([0-9]+)')
if($regex.length -gt 0) #it matched
{
$year = $regex[0].Groups[1].Value
$month = $regex[0].Groups[2].Value
$day = $regex[0].Groups[3].Value
write-output $year
write-output $month
write-output $day
write-output "*************"
$dirDate = $regex[0].Groups[0].Value + " 12:00:00 PM"
write-output $dirDate
Это довольно сложно, вы можете упростить его до чего-то вроде этого:
if ( Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.
Вы вправе использовать [DateTime]
объекты при сравнении, но учтите, что эти объекты всегда содержат время.
Удобно, что вы можете использовать свойство .Date
такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.
Вытащив мое измененное утверждение if
снизу, вы можете сделать это так:
[110] Теперь вы сравниваете только даты и игнорируете время!
[1123 На основании того, что вы показываете, похоже, что оператор if
работает, как ожидалось. Подводя итог, вы говорите, что:
$dateTimeObjectFromRegex
это Saturday, January 12, 2019 12:00:00 PM
$lastSaturday
это Saturday, January 12, 2019 3:59:04 PM
$weekAgoSunday
это Sunday, January 6, 2019 12:00:00 AM
[ 1127] Условным условием является: [111]
Поэтому в псевдокоде это:
[112] Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.
[113] Ваши функции уже возвращают [DateTime]
объекты, поэтому нет необходимости в этих приведениях.
[114] Это довольно сложно, вы можете упростить его до чего-то вроде этого:
[115] Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
.Name -match '(\d{4}-\d{2}-\d{2}) Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
) {
# in here, you know the match was successful
$dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something
if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) {
# do stuff
}
}
Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!
Ваш запрос является неправильным, так как необходимо было бы выполнить некоторую функцию агрегирования на EMPLOYEE_ID, если Вы хотите, чтобы это работало.
Как:
select substr(first_name,1,1) as alpha, count(employee_id)
from employees
group by substr(first_name,1,1)
, Что точно Вы пытаетесь выполнить?
Необходимо будет сгруппироваться всем, что не является агрегатной функцией, таким образом, у Вас не может быть employee_id в ИЗБРАННОЙ проекции. Также необходимо сгруппироваться просто первым символом first_name. Что-то вроде этого должно работать:
SELECT SUBSTR(first_name, 1, 1) AS alpha, COUNT(*) AS employee_count
FROM employees
GROUP BY SUBSTR(first_name, 1, 1);
, Который сгруппировался бы первой буквой имени и показал бы численность персонала, которые попадают в ту группу.
Это почти кажется на желание 26 записей, возвращенных с A, B, C как первый столбец и затем второй столбец, содержащий все идентификаторы сотрудника в разграниченном списке. Раз так посмотрите вопрос 468990, и/или это Просит, чтобы Tom связался . Что-то как (непротестированный)
SELECT SUBSTR(first_name,1,1), TO_STRING( CAST( COLLECT( employee_id ) AS ntt_varchar2 ) ) AS empIDs
FROM employees
GROUP BY
SUBSTR(first_name,1,1);
То, когда Вы группируетесь, все столбцы, которые появляются в Вашем списке выборки, которые не агрегированы, должны также появиться в "группе" пунктом (employee_id не делает).
Вы могли разъяснить то, что это - Вы, пытаются сделать?
Я думаю, что знаю то, что Вы пытаетесь сделать...
необходимо составить маленькую таблицу ссылок со столбцом 'буква' (буква, sort_order)
Вы должны свой запрос как
выбор l.letter, количество (e.id) как сотрудники от буквы L, оставленной сотрудника внешнего объединения e на l.letter = substr (e.first_name, 1,1)
, другой отправленный ответ даст Вам неожиданные результаты, когда не будет никаких сотрудников с определенной буквой на их имя...