IPhone, Получая Список стран в NSArray

Я думаю, вы можете просто добавить зарплату в свой подзапрос «hours_per_month» следующим образом:

select "Staff_Id", 
   extract(year from "Date")::int as work_year,
   extract(month from "Date")::int as work_month,
   sum(hours::interval) work_hours,
   trunc (extract (epoch from sum(hours::interval)) / 3600) * 150 as salary
from hours
where hours is not null
group by "Staff_Id", work_year, work_month

Это предполагает, что вы хотите платить целые часы (15,8 часа = 15 часов оплаты), но если нет, это достаточно легко настроить.

extract (hours может также работать, но не в том случае, если общее количество часов составляет> 24. По моему мнению, не стоит предполагать, что это произойдет, даже в таком случае, когда было бы нереально предполагать, что человек будет работать более 24 часов за один раз. Кроме того, вы можете невольно позже клонировать этот код, чтобы он работал для чего-то вроде «машинных часов», и в этом случае это было бы очень возможно.

Затем, в вашем основном запросе:

select "Staff_Id", 
   work_year,
   sum("work_hours") filter (where work_month = 1) as jan,
   sum(salary) filter (where work_month = 1) as jan_salary,
   sum("work_hours") filter (where work_month = 2) as feb,
   sum(salary) filter (where work_month = 2) as feb_salary,
   ...
   sum("work_hours") filter (where work_month = 12) as dec,
   sum(salary) filter (where work_month = 12) as dec_salary
from hours_per_month  
group by "Staff_Id", work_year

Совершенно не по теме, и я не пытаюсь рассказать вам, как прожить свою жизнь, но когда я вижу кавычки вокруг имен полей и таблиц, unelss это на самом последнем шаге запроса (вывод рендеринга) заставляет мою кожу сканировать. Это также вводит так много шансов на ошибки. По моему мнению, я не одинок:

https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_upper_case_table_or_column_names

43
задан iDeveloper 5 April 2016 в 06:05
поделиться

3 ответа

Используйте [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode] (где код страны является объектом в Вашем списке кодов страны) получить название страны в текущей локали пользователя.

38
ответ дан Chuck 26 November 2019 в 22:26
поделиться

Спасибо зажим.

Если кому-либо интересно или требуется, чтобы найти, что тем же решением вот является мой код для сортированного массива стран.

Objective C:

NSLocale *locale = [NSLocale currentLocale];
NSArray *countryArray = [NSLocale ISOCountryCodes];

NSMutableArray *sortedCountryArray = [[NSMutableArray alloc] init];

for (NSString *countryCode in countryArray) {

    NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
    [sortedCountryArray addObject:displayNameString];

}

[sortedCountryArray sortUsingSelector:@selector(localizedCompare:)];

Быстро:

let locale = NSLocale.currentLocale()
let countryArray = NSLocale.ISOCountryCodes()
var unsortedCountryArray:[String] = []
for countryCode in countryArray {
    let displayNameString = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
    if displayNameString != nil {
        unsortedCountryArray.append(displayNameString!)
    }
}
let sortedCountryArray = sorted(unsortedCountryArray, <)

Быстро 3

    let locale = NSLocale.current
    let unsortedCountries = NSLocale.isoCountryCodes.map { locale.localizedString(forRegionCode: $0)! }
    let sortedCountries = unsortedCountries.sorted()
94
ответ дан carmen_munich 26 November 2019 в 22:26
поделиться

Возможно, вы захотите определить языковой стандарт ..
и слишком много автоматически высвобождаемой памяти, что может быть критичным, вы никогда не знаете . так что создайте автоматически выпускаемый пул внутри цикла for. Вот это:

NSMutableArray * countriesArray = [[NSMutableArray alloc] init]; 
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];

NSArray *countryArray = [NSLocale ISOCountryCodes]; 
for (NSString *countryCode in countryArray) 
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
    [countriesArray addObject:displayNameString];
    [pool release];

}

[countriesArray sortUsingSelector:@selector(compare:)];
15
ответ дан 26 November 2019 в 22:26
поделиться