I am trying to write a query to a SQLite database (Spiceworks) in which I
need to transform some data as part of the SELECT statement.
The query I *want* to use looks like this (includes some pseudo code):
SELECT d.name, d.current_user, d.device_type, d.model, d.operating_system,
d.service_pack_major_version,
pd.model as HDModel,
--- check for hex string with leading zero (30) characters
CASE WHEN pd.serial like "303030%" THEN
LTRIM(X'pd.serial', '0')
-- check for hex string with leading space (20) characters
WHEN pd.serial like "202020%" THEN
LTRIM(X'pd.serial')
-- check for any other serial with leading zero characters
WHEN pd.serial like "00%" THEN
LTRIM(pd.serial, '0')
-- fall back to just presenting whatever is in the column
ELSE
pd.serial
END as HDSerial,
cast(pd.firmware as TEXT) as 'HD Firmware',
cast((pd.size / 1000000000) as NUMERIC) as SizeGB,
pd.failure_prediction as 'SMART Enabled',
pd.status as 'SMART Status'
FROM devices d
INNER JOIN physical_disks pd ON (d.id = pd.computer_id)
WHERE SizeGB > 20 AND d.name like "0039%"
ORDER BY d.model, d.name ASC;
Everything in that query works perfectly for me except the X'pd.serial'
lines. I want to put the value of the pd.serial field into the X'...'
format and be returned the decoded hex data. I can manually do it one by
one and get the data I want:
sqlite> select X'3030303030303030313131343330423137454342';
00000000111430B17ECB
But I can't figure out a way do this dynamically for all rows. I'm hoping
there is just a bit of syntax I am missing or another function or method I
should be using. I see lots and lots of documentation about using that
X'...' format, but always in the examples they are static one-off values,
and never as part of a larger SELECT query.
For what it's worth, I did discover that I can concatenate a string to
create the X'...' format I want, but there doesn't seem to be anyway to
actually evaluate that into the converted data. (instead I just get back
the whole X'3030303030303030313131343330423137454342' as a text string.
The concatenation method I used is:
('X''' || pd.serial || '''')
Unfortunately, I don't have the ability to just grab the raw data out of
SQL and then post-process it with PHP or another language for this specific
task (which would be much easier for me). I'm trying to keep this as a
built-in report for Spiceworks, and that limits me to only what a SQL query
can spit out.
Any guidance offered is appreciated!
Thanks,
Jim Sanders
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users