powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
14 сообщений из 14, страница 1 из 1
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38657931
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Подскажите пожалуйста, у меня в базе хранятся данные в определенном формате, например

id items desc
1 40:100 fish
2 20:30.5 temp

Можно ли задать такой запрос, который бы мог определить, входит ли разыскиваемое число в диапазон? Т к items имеет формат 40< x < 100, 20< x < 30.5

Т е написать запрос типа SELECT * FROM table_name WHERE items = (УСЛОВИЕ), где условие = 40< x < 100, где х будет передаваться в запрос. Поле items имеет тип char(128).

Пока у меня есть решение считывать все строчки и их в программе сортировать, но мне кажется в SQL можно как то обрабатывать данные на этапе выборки.

Спасибо.
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38657936
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimo Zorg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table table_name (
  id        integer primary key,
  items      char(128) not null,
  decsr      char(128) null
);

insert into table_name values ( 1, "40:100", "fish" );
insert into table_name values ( 2, "20:30.5", "tv" );
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658001
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimo Zorg,

Код: sql
1.
2.
3.
4.
select *
from table_name
where 30.2 between cast(substr(items, 1, instr(items, ':') - 1) as real)
               and cast(substr(items, instr(items, ':') + 1) as real)
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658007
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Спасибо Вам огромное!
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658023
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimo Zorg,

А если задачу усложнить и ввести дополнительное правило, скажем этих диапазонов может быть несколько и нужно проверить их все. Можно как-то обрабатывать до признака конца строки, если такое в базе вообще имеется, например:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table table_name (
  id        integer primary key,
  items      char(128) not null,
  decsr      char(128) null
);

insert into table_name values ( 1, "40:100,300:900,1000:1100", "fish" );
insert into table_name values ( 2, "20:30.5,200:300", "tv" );



Скажем, х = 1000 и я должен вывести 1 строку.

Спасибо!
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658037
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimo Zorg,

Можно определить длину строки с помощью функции Length(). Если всё же планируется в таком виде размещать данные в базе, то в приложении (точно на: C++, .NET, PHP) можно написать пользовательскую функцию которая распарсит данные и зарегистрировать данную функцию как SQLite функцию и использовать в запросах. Можно и на голом SQL сделать, но будет больше кода и сложно его сопровождать
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658058
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Еще раз спасибо Вам, понятно, в какую сторону смотреть!
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38658068
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimo Zorg,

Пока есть время свободное, да и вспомнить не помешает мне, пример на VB.NET с пользовательской функцией SQLite.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Module Module1

    Sub Main()

        Dim SQLCn As New SQLite.SQLiteConnection("data source=:memory:")
        SQLCn.Open()

        Dim SQLCmd As SQLite.SQLiteCommand = SQLCn.CreateCommand()
        SQLCmd.CommandText = "create table table_name (" &
                                "id        integer primary key," &
                                "items      char(128) not null," &
                                "decsr      char(128) null" &
                            ");" &
                            "insert into table_name values ( 1, '40:100,300:900,1000:1100', 'fish' );" &
                            "insert into table_name values ( 2, '20:30.5,200:300', 'tv' );"
        SQLCmd.ExecuteNonQuery()

        SQLCmd = SQLCn.CreateCommand()
        SQLCmd.CommandText = "select decsr from table_name where InRange(items, 300) = 1" 'Используем нашу функцию

        Dim SQLRead As SQLite.SQLiteDataReader = SQLCmd.ExecuteReader()
        Do While SQLRead.Read()
            Console.WriteLine(SQLRead.GetString(0))
        Loop

        Console.ReadLine()
    End Sub



End Module

'Классу добавляем аттрибут указывающий что это SQLite функция, также наследуем абстрактный класс и переопределяем
<SQLite.SQLiteFunction("InRange", 2, SQLite.FunctionType.Scalar)>
Public Class SQLiteInRange
    Inherits SQLite.SQLiteFunction

    Public Overrides Function Invoke(args() As Object) As Object
        Dim sItems As String = Convert.ToString(args(0))
        Dim iValue As Integer = Convert.ToInt32(args(1))

        'Здесь закладываем логику
        For Each xItem In sItems.Split(",")
            Dim arrNumbers() As String = xItem.Split(":")

            If iValue >= Convert.ToDouble(arrNumbers(0).Replace(".", ",")) And iValue <= Convert.ToDouble(arrNumbers(1).Replace(".", ",")) Then
                Return True
            End If
        Next

        Return False
    End Function
End Class
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38670674
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Спасибо Вам, очередной раз! Я решил задачу понятным мне способом, отсеял сам программно, только добрался до чтения документации и попробовать реализовать в SQLite. Но VB.NET мне незнаком, я все в Си делаю. Но Ваше решение мне нравится и кажется изящным. Попробую переварить =)
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38670798
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в Си это все еще проще.
Читать тут: http://sqlite.org/c3ref/create_function.html
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38671146
Dimo ZorgА если задачу усложнить ...
Перед усложнением задачи неплохо бы было "прокачаться" в области теории баз данных. На данном этапе твоего развития очень не помешает почитать про нормальные формы, понять что это, зачем нужно, а главное - научится применять на практике полученные знания. Иначе так и будешь всю жизнь изобретать кривые велосипеды.
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38671406
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх, давайте без философии и пафоса...
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38671451
Dimo Zorg,

где ты увидел философию и пафос? это был совет от чистого сердца...
с другой стороны, если тебе нравится суп есть вилкой и носить воду в дуршлаге, то это, конечно же, твое личное право. настаивать на ином не собираюсь ;)
...
Рейтинг: 0 / 0
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
    #38671907
Dimo Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlА в Си это все еще проще.
Читать тут: http://sqlite.org/c3ref/create_function.html

Действительно элементарно! Спасибо!!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]